Name: series-workflowngqbq Phase: Running StartedAt: 2026-08-25 10:19:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[0] Phase: Succeeded StartedAt: 2026-08-25 10:19:53 +0000 UTC FinishedAt: 2026-08-25 10:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 10:19:53 +0000 UTC FinishedAt: 2026-08-25 10:44:58 +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": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "CAN", "CAN_ISOTP", "NET_CLS_ACT", "NET_ACT_GACT", "GACT_PROB", "AIO", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "CAN", "CAN_ISOTP", "NET_CLS_ACT", "NET_ACT_GACT", "GACT_PROB", "AIO", "VLAN_8021Q" ], "series_id": "a5fd2106-d30e-41d7-9ec7-56c6158c22f8" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "ext4_resize_fs", "pidfd_ioctl", "proc_uid_map_write", "isotp_sendmsg", "tcf_gact_act", "sys_io_getevents", "reuseport_select_sock", "register_vlan_dev", "vfs_get_tree" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FDVCYjMzQ7LAogICAgJiMzNDtHQUNUX1BST0ImIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtwaWRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcm9jX3VpZF9tYXBfd3JpdGUmIzM0OywKICAgICYjMzQ7aXNvdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAgICYjMzQ7c3lzX2lvX2dldGV2ZW50cyYjMzQ7LAogICAgJiMzNDtyZXVzZXBvcnRfc2VsZWN0X3NvY2smIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7dmZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbW9yeSBiYXJyaWVycyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoZnMsIG5ldCwga2VybmVsLCBsaWIpIGJ5IHJlcGxhY2luZyBwbGFpbiByZWFkcy93cml0ZXMgYW5kIHNtcF9ybWIvd21iIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBjb25jdXJyZW5jeSBzZW1hbnRpY3MsIGZpeGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW1wcm92aW5nIGNvcnJlY3RuZXNzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbG9naWMsIGluY2x1ZGluZyBleHQ0IHJlc2l6aW5nLCBBSU8gZXZlbnQgcmVhZGluZywgdXNlciBuYW1lc3BhY2UgSUQgbWFwcGluZywgQ0FOIElTT1RQIG1lc3NhZ2Ugc2VuZGluZywgYW5kIFNPX1JFVVNFUE9SVCBzb2NrZXQgc2VsZWN0aW9uLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiODA4N2RhM2VhNDU4YWJhMGI0ZTFkMTI1MjlkMGJkN2I0MDVlYzRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MzY6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgJiM0MzsxMjA2LDEyIEBAIHN0YXRpYyB2b2lkIGFpb19jb21wbGV0ZShzdHJ1Y3QgYWlvX2tpb2NiICppb2NiKVxuIFx0LyogYWZ0ZXIgZmxhZ2dpbmcgdGhlIHJlcXVlc3QgYXMgZG9uZSwgd2VcbiBcdCAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcdC8qIG1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqL1xuLVxuLVx0Y3R4LVx1MDAzZXRhaWwgPSB0YWlsO1xuJiM0MztcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZXRhaWwsIHRhaWwpO1xuIFxuIFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcdGhlYWQgPSByaW5nLVx1MDAzZWhlYWQ7XG4tXHRyaW5nLVx1MDAzZXRhaWwgPSB0YWlsO1xuJiM0MztcdC8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJpbmctXHUwMDNldGFpbCwgdGFpbCk7XG4gXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcbiBcdGN0eC1cdTAwM2Vjb21wbGV0ZWRfZXZlbnRzJiM0MzsmIzQzOztcbkBAIC0xMjg4LDEzICYjNDM7MTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXG4gXHQvKiBBY2Nlc3MgdG8gLVx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cdTAwM2VyaW5nX2xvY2suICovXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHRhaWwgPSByaW5nLVx1MDAzZXRhaWw7XG4tXG4gXHQvKlxuIFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSYjMzk7dmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXRcbiBcdCAqIHdlIGFsc28gc2VlIHRoZSBldmVudHMgdGhhdCB3ZXJlIHN0b3JlZCB1cCB0byB0aGUgdGFpbC5cbiYjNDM7XHQgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuXG4gXHQgKi9cbi1cdHNtcF9ybWIoKTtcbiYjNDM7XHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwpO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7aCV1IHQldSBtJXVcXG5cJiMzNDssIGhlYWQsIHRhaWwsIGN0eC1cdTAwM2Vucl9ldmVudHMpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0zNTQyLDE2ICYjNDM7MzU0MiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pc2l6ZV9zZXQoc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgbG9mZl90IGlfc2l6ZSlcbiB9XG4gXG4gLypcbi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlXG4tICogdGhlIGxvY2tpbmcgcHJvdG9jb2wgZG9jdW1lbnRlZCBpbiB0aGUgY29tbWVudHMgb2YgZXh0NF9ncm91cF9hZGQoKVxuLSAqIGluIHJlc2l6ZS5jXG4mIzQzOyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXG4mIzQzO1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19ncm91cHNfY291bnQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmNcbmluZGV4IDA2MTcxYTExZGIxMjUuLmExNTI4NTIyNGNkZjYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9tYmFsbG9jLmNcbkBAIC04OTksMTAgJiM0Mzs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuJiM0MztcdFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbiYjNDM7XHRcdG5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0IoYWMtXHUwMDNlYWNfc2IpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3Vwcyk7XG4gXG4gXHRyZXR1cm4gbmdyb3VwcztcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmNcbmluZGV4IDJjNWI4NTFjNTUyYTYuLjVlM2FkODM5M2NmODMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5AQCAtMTQ2MiwxMSAmIzQzOzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbiYjNDM7XHQgKiAqIFdyaXRlcnMgbXVzdCB1c2UgYSByZWxlYXNlIHN0b3JlIHdoZW4gdXBkYXRpbmcgdGhlIGdyb3VwcyBjb3VudFxuJiM0MztcdCAqICAgYWZ0ZXIgYWxsIGRlcGVuZGVudCBkYXRhIGhhcyBiZWVuIHVwZGF0ZWRcbiBcdCAqXG4tXHQgKiAqIFJlYWRlcnMgbXVzdCBwZXJmb3JtIGFuIHNtcF9ybWIoKSBhZnRlciByZWFkaW5nIHRoZSBncm91cHNcbi1cdCAqICAgY291bnQgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiYjNDM7XHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4mIzQzO1x0ICogICBjb3VudCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4gXHQgKlxuIFx0ICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50XG4gXHQgKiB3aGlsZSBmcmVlaW5nIGRhdGEsIGFzIHdlIGNhbiBvbmx5IGFsbG9jYXRlIGZyb20gYSBibG9ja1xuQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKiBvbmx5IHRoZW4gZnJlZSBhZnRlciBzZXJpYWxpc2luZyBpbiB0dXJuIGFnYWluc3QgdGhhdFxuIFx0ICogYWxsb2NhdGlvbi5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSBnbG9iYWwgZnMgc2l6ZSBmaWVsZHMgKi9cbi1cdHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCAmIzQzOz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4mIzQzO1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICYjNDM7IGZsZXhfZ2QtXHUwMDNlY291bnQpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuJiM0MztcdFx0XHQgIG1pbihzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4mIzQzO1x0XHRcdCAgICAgIChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSkpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSByZXNlcnZlZCBibG9jayBjb3VudHMgb25seSBvbmNlIHRoZSBuZXcgZ3JvdXAgaXNcbiBcdCAqIGFjdGl2ZS4gKi9cbmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmNcbmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0XG4tLS0gYS9mcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGUuY1xuQEAgLTI3Myw4ICYjNDM7MjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyAmIzQzOzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXG4gXHQvKiBBbGwgZ29vZCwgc28gd2UgdHJ5ICovXG4gXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xuIFx0ZXJyb3IgPSBleHBhbmRfZmR0YWJsZShmaWxlcywgbnIpO1xuLVx0ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7XG4mIzQzO1x0LyogY291cGxlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgJiM0Mzs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJjdV9yZWFkX2xvY2tfc2NoZWQoKTtcbi1cdGlmICh1bmxpa2VseShmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSB7XG4mIzQzO1x0LyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCAmIzQzOzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFxuIFx0YXR0ciA9IFJFQURfT05DRShwaWQtXHUwMDNlYXR0cik7XG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbi1cdFx0XHRzbXBfcm1iKCk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbiBcdFx0XHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUFNcbiBcdFx0XHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXHUwMDNlY2dyb3VwaWQ7XG5AQCAtNDA1LDggJiM0Mzs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFO1xuIFx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cdTAwM2Vjb3JlZHVtcF9zaWduYWw7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjU4NjBkYWVhNmQ0MDUgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMjY3LDEyICYjNDM7MjY3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0ICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmdcbiBcdCAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXRcbiBcdCAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrXG4tXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzXG4tXHQgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuXG4mIzQzO1x0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBhY3F1aXJlIGlzIG1hdGNoZWRcbiYjNDM7XHQgKiB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHN1cGVyX3dha2UoKSBhcyB3ZSBkb24mIzM5O3QgaG9sZCBsb2NrcyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9CT1JOKSlcbiYjNDM7XHRpZiAoIShzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpIFx1MDAyNiBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgJiM0MzszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb1xuIFxuIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxuIHtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSAmIzQzOzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50XG4gXG4gdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSAmIzQzOzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwcG9zLFxuIFx0XHQgICAgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIHtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSAmIzQzOzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHQgKiBkZXNpcmVkIGJlaGF2aW9yIGlzIHRvIHNlZSB0aGUgdmFsdWVzIG9mIHRoZSBleHRlbnRzIHRoYXRcbiBcdCAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLlxuIFx0ICpcbi1cdCAqIFRvIGFjaGlldmUgdGhpcyBzbXBfd21iKCkgaXMgdXNlZCBvbiBndWFyYW50ZWUgdGhlIHdyaXRlXG4tXHQgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBjcmF6eVxuLVx0ICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS5cbiYjNDM7XHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuJiM0MztcdCAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50XG4mIzQzO1x0ICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZVxuJiM0MztcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbiYjNDM7XHQgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuXG4gXHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2dXNlcm5zX3N0YXRlX211dGV4KTtcbiBcbkBAIC0xMDk4LDggJiM0MzsxMTAwLDggQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRtYXAtXHUwMDNlZm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDtcbiBcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7XG4gXHR9XG4tXHRzbXBfd21iKCk7XG4tXHRtYXAtXHUwMDNlbnJfZXh0ZW50cyA9IG5ld19tYXAubnJfZXh0ZW50cztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTtcbiBcbiBcdCpwcG9zID0gY291bnQ7XG4gXHRyZXQgPSBjb3VudDtcbmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jXG5pbmRleCBlMjg1ZThiYzQ3MTJhLi5kNmYyMzVlMTQzYjcyIDEwMDY0NFxuLS0tIGEvbGliL3ZzcHJpbnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi92c3ByaW50Zi5jXG5AQCAtNzYyLDkgJiM0Mzs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZFxuIHtcbiBcdGdldF9yYW5kb21fYnl0ZXMoXHUwMDI2cHRyX2tleSwgc2l6ZW9mKHB0cl9rZXkpKTtcbiBcbi1cdC8qIFBhaXJzIHdpdGggc21wX3JtYigpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXG4tXHRzbXBfd21iKCk7XG4tXHRXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuIFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIH1cbiBcbkBAIC03ODEsMTIgJiM0Mzs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaGFzaHZhbDtcbiBcbi1cdGlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2ZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbi1cdHNtcF9ybWIoKTtcbi1cbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gXHRoYXNodmFsID0gKHVuc2lnbmVkIGxvbmcpc2lwaGFzaF8xdTY0KCh1NjQpcHRyLCBcdTAwMjZwdHJfa2V5KTtcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmNcbmluZGV4IDJkMmVmYjg3Nzk3NWQuLmUzNGFkYTBjY2VhY2YgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jXG5AQCAtNzAsMTAgJiM0Mzs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4mIzQzO1x0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdLCBhcnJheSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmhcbmluZGV4IGM0MWNhYWY5NDA5NWYuLjZkYjcxNzJiZGFhY2MgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5oXG5AQCAtNTYsMTEgJiM0Mzs1Niw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cbiYjNDM7XHRhcnJheSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxuJiM0MztcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbiBcdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xuaW5kZXggMTU1NTMwYWVkY2UyZS4uMTFiNjUzYmE3YzEwOSAxMDA2NDRcbi0tLSBhL25ldC9jYW4vaXNvdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9pc290cC5jXG5AQCAtMTE1Niw4ICYjNDM7MTE1Niw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0bXlfZ2VuID0gaXNvdHBfaW5jX3R4X2dlbihSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSk7XG4gXHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovXG4gXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcbi1cdHNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi9cbi1cdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1NFTkRJTkcpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbiBcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXG5pbmRleCAyOTk0OGNiNDRiN2QxLi42ZDNjNTExZDFkZWY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuQEAgLTEyNSw5ICYjNDM7MTI1LDggQEAgc3RhdGljIHZvaWQgX19yZXVzZXBvcnRfYWRkX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG4ge1xuIFx0cmV1c2UtXHUwMDNlc29ja3NbcmV1c2UtXHUwMDNlbnVtX3NvY2tzXSA9IHNrO1xuLVx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xuLVx0c21wX3dtYigpO1xuLVx0cmV1c2UtXHUwMDNlbnVtX3NvY2tzJiM0MzsmIzQzOztcbiYjNDM7XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmV1c2UtXHUwMDNlbnVtX3NvY2tzLCByZXVzZS1cdTAwM2VudW1fc29ja3MgJiM0MzsgMSk7XG4gXHRyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpO1xuIH1cbiBcbkBAIC0xNDAsNyAmIzQzOzEzOSw4IEBAIHN0YXRpYyBib29sIF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cmV1c2UtXHUwMDNlc29ja3NbaV0gPSByZXVzZS1cdTAwM2Vzb2Nrc1tyZXVzZS1cdTAwM2VudW1fc29ja3MgLSAxXTtcbi1cdHJldXNlLVx1MDAzZW51bV9zb2Nrcy0tO1xuJiM0MztcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MsIHJldXNlLVx1MDAzZW51bV9zb2NrcyAtIDEpO1xuIFx0cmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU4MywxMSAmIzQzOzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4tXHRzb2NrcyA9IFJFQURfT05DRShyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuJiM0MztcdC8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqL1xuJiM0MztcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuIFx0aWYgKGxpa2VseShzb2NrcykpIHtcbi1cdFx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdFx0c21wX3JtYigpO1xuLVxuIFx0XHRpZiAoIXByb2cgfHwgIXNrYilcbiBcdFx0XHRnb3RvIHNlbGVjdF9ieV9oYXNoO1xuIFxuQEAgLTYzNCwxMyAmIzQzOzYzMiwxMSBAQCBzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X21pZ3JhdGVfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAoIXJldXNlKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4mIzQzO1x0LyogcGFpcmVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4mIzQzO1x0c29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2tzKSlcbiBcdFx0Z290byBmYWlsdXJlO1xuIFxuLVx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGhhc2ggPSBtaWdyYXRpbmdfc2stXHUwMDNlc2tfaGFzaDtcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4gXHRpZiAoIXByb2cgfHwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfU0tfUkVVU0VQT1JUX1NFTEVDVF9PUl9NSUdSQVRFKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuaW5kZXggNTY1ODYwY2NjYmE2ZC4uZDRmMzlmOThlMmNmMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuQEAgLTI1LDcgJiM0MzsyNSw2IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2FjdF9vcHM7XG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KVxuIHtcbi1cdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiBcdGlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LVx1MDAzZXRjZmdfcHZhbCkpXG4gXHRcdHJldHVybiBnYWN0LVx1MDAzZXRjZl9hY3Rpb247XG4gXHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZnX3BhY3Rpb247XG5AQCAtMzUsNyAmIzQzOzM0LDYgQEAgc3RhdGljIGludCBnYWN0X2RldGVybShzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpXG4ge1xuIFx0dTMyIHBhY2sgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZnYWN0LVx1MDAzZXBhY2tldHMpO1xuIFxuLVx0c21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqL1xuIFx0aWYgKHBhY2sgJSBnYWN0LVx1MDAzZXRjZmdfcHZhbClcbiBcdFx0cmV0dXJuIGdhY3QtXHUwMDNldGNmX2FjdGlvbjtcbiBcdHJldHVybiBnYWN0LVx1MDAzZXRjZmdfcGFjdGlvbjtcbkBAIC0xMzMsMTEgJiM0MzsxMzEsOCBAQCBzdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRpZiAocF9wYXJtKSB7XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wYWN0aW9uID0gcF9wYXJtLVx1MDAzZXBhY3Rpb247XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tXHUwMDNlcHZhbCk7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0Y2ZnX3B2YWwgaXMgd3JpdHRlbiBiZWZvcmUgdGNmZ19wdHlwZVxuLVx0XHQgKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGdhY3RfbmV0X3JhbmQoKSBcdTAwMjYgZ2FjdF9kZXRlcm0oKVxuLVx0XHQgKi9cbi1cdFx0c21wX3dtYigpO1xuLVx0XHRnYWN0LVx1MDAzZXRjZmdfcHR5cGUgICA9IHBfcGFybS1cdTAwM2VwdHlwZTtcbiYjNDM7XHRcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHRjZl9nYWN0X2FjdCgpLiAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlLCBwX3Bhcm0tXHUwMDNlcHR5cGUpO1xuIFx0fVxuICNlbmRpZlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG5AQCAtMTYwLDcgJiM0MzsxNTUsOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBcdHtcbi1cdHUzMiBwdHlwZSA9IFJFQURfT05DRShnYWN0LVx1MDAzZXRjZmdfcHR5cGUpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiYjNDM7XHR1MzIgcHR5cGUgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmdhY3QtXHUwMDNldGNmZ19wdHlwZSk7XG4gXG4gXHRpZiAocHR5cGUpXG4gXHRcdGFjdGlvbiA9IGdhY3RfcmFuZFtwdHlwZV0oZ2FjdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FDVCYjMzQ7LAogICAgJiMzNDtHQUNUX1BST0ImIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtwaWRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcm9jX3VpZF9tYXBfd3JpdGUmIzM0OywKICAgICYjMzQ7aXNvdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAgICYjMzQ7c3lzX2lvX2dldGV2ZW50cyYjMzQ7LAogICAgJiMzNDtyZXVzZXBvcnRfc2VsZWN0X3NvY2smIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7dmZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1vcnkgYmFycmllcnMgYWNyb3NzIG11bHRpcGxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGZzLCBuZXQsIGtlcm5lbCwgbGliKSBieSByZXBsYWNpbmcgcGxhaW4gcmVhZHMvd3JpdGVzIGFuZCBzbXBfcm1iL3dtYiB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgY29uY3VycmVuY3kgc2VtYW50aWNzLCBmaXhpbmcgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGltcHJvdmluZyBjb3JyZWN0bmVzcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGxvZ2ljLCBpbmNsdWRpbmcgZXh0NCByZXNpemluZywgQUlPIGV2ZW50IHJlYWRpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIENBTiBJU09UUCBtZXNzYWdlIHNlbmRpbmcsIGFuZCBTT19SRVVTRVBPUlQgc29ja2V0IHNlbGVjdGlvbi4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjgwODdkYTNlYTQ1OGFiYTBiNGUxZDEyNTI5ZDBiZDdiNDA1ZWM0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEwOjM2OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBkNzhhY2M2OWY0ODcwLi40NDEzYzgyNjg4Y2M4IDEwMDY0NAotLS0gYS9mcy9haW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uYwpAQCAtMTIwNiwxMyAmIzQzOzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpCiAJLyogYWZ0ZXIgZmxhZ2dpbmcgdGhlIHJlcXVlc3QgYXMgZG9uZSwgd2UKIAkgKiBtdXN0IG5ldmVyIGV2ZW4gbG9vayBhdCBpdCBhZ2FpbgogCSAqLwotCXNtcF93bWIoKTsJLyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCi0KLQljdHgtJmd0O3RhaWwgPSB0YWlsOwomIzQzOwlXUklURV9PTkNFKGN0eC0mZ3Q7dGFpbCwgdGFpbCk7CiAKIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQlyaW5nLSZndDt0YWlsID0gdGFpbDsKJiM0MzsJLyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmluZy0mZ3Q7dGFpbCwgdGFpbCk7CiAJZmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC0mZ3Q7cmluZ19mb2xpb3NbMF0pOwogCiAJY3R4LSZndDtjb21wbGV0ZWRfZXZlbnRzJiM0MzsmIzQzOzsKQEAgLTEyODgsMTMgJiM0MzsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwKIAkvKiBBY2Nlc3MgdG8gLSZndDtyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtJmd0O3JpbmdfbG9jay4gKi8KIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQl0YWlsID0gcmluZy0mZ3Q7dGFpbDsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgb25jZSB3ZSYjMzk7dmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXQKIAkgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuCiYjNDM7CSAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS4KIAkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CXRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmluZy0mZ3Q7dGFpbCk7CiAKIAlwcl9kZWJ1ZygmIzM0O2gldSB0JXUgbSV1XG4mIzM0OywgaGVhZCwgdGFpbCwgY3R4LSZndDtucl9ldmVudHMpOwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0zNTQyLDE2ICYjNDM7MzU0MiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pc2l6ZV9zZXQoc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgbG9mZl90IGlfc2l6ZSkKIH0KIAogLyoKLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWUKLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKCkKLSAqIGluIHJlc2l6ZS5jCiYjNDM7ICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLgogICovCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlleHQ0X2dyb3VwX3QJbmdyb3VwcyA9IEVYVDRfU0Ioc2IpLSZndDtzX2dyb3Vwc19jb3VudDsKLQotCXNtcF9ybWIoKTsKLQlyZXR1cm4gbmdyb3VwczsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtODk5LDEwICYjNDM7ODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgKIAogCS8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi8KIAlpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy0mZ3Q7YWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKQotCQluZ3JvdXBzID0gRVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHM7Ci0KLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCi0Jc21wX3JtYigpOwomIzQzOwkJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJCW5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMpOwogCiAJcmV0dXJuIG5ncm91cHM7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTE0NjIsMTEgJiM0MzsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICoKIAkgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOgogCSAqCi0JICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGwKLQkgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogKiBXcml0ZXJzIG11c3QgdXNlIGEgcmVsZWFzZSBzdG9yZSB3aGVuIHVwZGF0aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZAogCSAqCi0JICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzCi0JICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgomIzQzOwkgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzCiYjNDM7CSAqICAgY291bnQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgogCSAqCiAJICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50CiAJICogd2hpbGUgZnJlZWluZyBkYXRhLCBhcyB3ZSBjYW4gb25seSBhbGxvY2F0ZSBmcm9tIGEgYmxvY2sKQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXQKIAkgKiBhbGxvY2F0aW9uLgogCSAqLwotCXNtcF93bWIoKTsKIAogCS8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovCi0Jc2JpLSZndDtzX2dyb3Vwc19jb3VudCAmIzQzOz0gZmxleF9nZC0mZ3Q7Y291bnQ7Ci0Jc2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKLQkJCShFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGV4dDRfZ2V0X2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgIHNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0MzsgZmxleF9nZC0mZ3Q7Y291bnQpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMsCiYjNDM7CQkJICBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTsKIAogCS8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzCiAJICogYWN0aXZlLiAqLwpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9maWxlLmMKQEAgLTI3Myw4ICYjNDM7MjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCXJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy0mZ3Q7ZmR0LCBuZXdfZmR0KTsKIAlpZiAoY3VyX2ZkdCAhPSAmYW1wO2ZpbGVzLSZndDtmZHRhYikKIAkJY2FsbF9yY3UoJmFtcDtjdXJfZmR0LSZndDtyY3UsIGZyZWVfZmR0YWJsZV9yY3UpOwotCS8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovCi0Jc21wX3dtYigpOwogCXJldHVybiAwOwogfQogCkBAIC0zMTMsNyAmIzQzOzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpCiAJLyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqLwogCWZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCWVycm9yID0gZXhwYW5kX2ZkdGFibGUoZmlsZXMsIG5yKTsKLQlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7CiYjNDM7CS8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcywgZmFsc2UpOwogCiAJd2FrZV91cF9hbGwoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX3dhaXQpOwogCXJldHVybiBlcnJvcjsKQEAgLTY4NSwxMyAmIzQzOzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJcmV0dXJuOwogCiAJcmN1X3JlYWRfbG9ja19zY2hlZCgpOwotCWlmICh1bmxpa2VseShmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkgewomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqLwomIzQzOwlpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MpKSkgewogCQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKIAkJZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7CiAJCXJldHVybjsKIAl9Ci0JLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiBleHBhbmRfZmR0YWJsZSgpICovCi0Jc21wX3JtYigpOwogCWZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy0mZ3Q7ZmR0KTsKIAlWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSkgIT0gTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGZkdC0mZ3Q7ZmRbZmRdLCBmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL3BpZGZzLmMgYi9mcy9waWRmcy5jCmluZGV4IGE2YTY0M2YxNWQwOGEuLjJjZDBmYWI3MzE4MGUgMTAwNjQ0Ci0tLSBhL2ZzL3BpZGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcGlkZnMuYwpAQCAtMzkzLDggJiM0MzszOTMsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAogCWF0dHIgPSBSRUFEX09OQ0UocGlkLSZndDthdHRyKTsKIAlpZiAobWFzayAmYW1wOyBQSURGRF9JTkZPX0VYSVQpIHsKLQkJaWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewotCQkJc21wX3JtYigpOwomIzQzOwkJaWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7CiAJCQlraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDsKICNpZmRlZiBDT05GSUdfQ0dST1VQUwogCQkJa2luZm8uY2dyb3VwaWQgPSBhdHRyLSZndDtjZ3JvdXBpZDsKQEAgLTQwNSw4ICYjNDM7NDA0LDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJfQogCiAJaWYgKG1hc2sgJmFtcDsgUElERkRfSU5GT19DT1JFRFVNUCkgewotCQlpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewotCQkJc21wX3JtYigpOwomIzQzOwkJaWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewogCQkJa2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7CiAJCQlraW5mby5jb3JlZHVtcF9tYXNrID0gYXR0ci0mZ3Q7Y29yZWR1bXBfbWFzazsKIAkJCWtpbmZvLmNvcmVkdW1wX3NpZ25hbCA9IGF0dHItJmd0O2NvcmVkdW1wX3NpZ25hbDsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjU4NjBkYWVhNmQ0MDUgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMjY3LDEyICYjNDM7MjY3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAogCSAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nCiAJICogZmlsZXN5c3RlbSBtaWdodCBiZSBpbiBhIHN0YXRlIG9mIHBhcnRpYWwgY29uc3RydWN0aW9uIGFuZCBoZW5jZSBpdAogCSAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrCi0JICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpcwotCSAqIG1hdGNoZWQgd2l0aCB0aGUgb25lIGluIG1vdW50X2ZzKCkgYXMgd2UgZG9uJiMzOTt0IGhvbGQgbG9ja3MgaGVyZS4KJiM0MzsJICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBhY3F1aXJlIGlzIG1hdGNoZWQKJiM0MzsJICogd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYXMgd2UgZG9uJiMzOTt0IGhvbGQgbG9ja3MgaGVyZS4KIAkgKi8KLQlpZiAoIShzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9CT1JOKSkKJiM0MzsJaWYgKCEoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3NiLSZndDtzX2ZsYWdzKSAmYW1wOyBTQl9CT1JOKSkKIAkJcmV0dXJuIDA7Ci0Jc21wX3JtYigpOwogCiAJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzICZhbXA7JmFtcDsKIAkgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCkBAIC0zMTcsOSAmIzQzOzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvCiAKIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTM4Myw5ICYjNDM7MzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQKIAogdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChleHRlbnRzICZsdDs9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpCiAJCWV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTY3Niw5ICYjNDM7Njc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcywKIAkJICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCWxvZmZfdCBwb3MgPSAqcHBvczsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChwb3MgJmd0Oz0gZXh0ZW50cykKIAkJcmV0dXJuIE5VTEw7CkBAIC05NjcsOSAmIzQzOzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0CiAJICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuCiAJICoKLQkgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZQotCSAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGNyYXp5Ci0JICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS4KJiM0MzsJICogVGhlIG5yX2V4dGVudHMgZmllbGQgaXMgdGhlIHB1Ymxpc2ggcG9pbnQgZm9yIHRoZSBleHRlbnQKJiM0MzsJICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnQKJiM0MzsJICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZQomIzQzOwkgKiBzbXBfbG9hZF9hY3F1aXJlKCkgdG8gZW5zdXJlIHRoZXkgc2VlIGEgY29uc2lzdGVudCB2aWV3IG9mCiYjNDM7CSAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy4KIAkgKi8KIAltdXRleF9sb2NrKCZhbXA7dXNlcm5zX3N0YXRlX211dGV4KTsKIApAQCAtMTA5OCw4ICYjNDM7MTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJbWFwLSZndDtmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkOwogCQltYXAtJmd0O3JldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7CiAJfQotCXNtcF93bWIoKTsKLQltYXAtJmd0O25yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTsKIAogCSpwcG9zID0gY291bnQ7CiAJcmV0ID0gY291bnQ7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGUyODVlOGJjNDcxMmEuLmQ2ZjIzNWUxNDNiNzIgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi92c3ByaW50Zi5jCkBAIC03NjIsOSAmIzQzOzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkCiB7CiAJZ2V0X3JhbmRvbV9ieXRlcygmYW1wO3B0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwotCXNtcF93bWIoKTsKLQlXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTc4MSwxMiAmIzQzOzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBoYXNodmFsOwogCi0JaWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCS8qIFBhaXJzIHdpdGggc21wX3dtYigpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KLQlzbXBfcm1iKCk7Ci0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAloYXNodmFsID0gKHVuc2lnbmVkIGxvbmcpc2lwaGFzaF8xdTY0KCh1NjQpcHRyLCAmYW1wO3B0cl9rZXkpOwogCS8qCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCAyZDJlZmI4Nzc5NzVkLi5lMzRhZGEwY2NlYWNmIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTcwLDEwICYjNDM7NzAsOCBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIAlpZiAoYXJyYXkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JLyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi8KLQlzbXBfd21iKCk7Ci0KLQl2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSA9IGFycmF5OwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdLCBhcnJheSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oCmluZGV4IGM0MWNhYWY5NDA5NWYuLjZkYjcxNzJiZGFhY2MgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uaApAQCAtNTYsMTEgJiM0Mzs1Niw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5OwogCi0JYXJyYXkgPSB2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQotCQkJCSAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOwotCi0JLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovCiYjNDM7CWFycmF5ID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCiYjNDM7CQkJCSBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTsKIAogCXJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmMKaW5kZXggMTU1NTMwYWVkY2UyZS4uMTFiNjUzYmE3YzEwOSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9pc290cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuYwpAQCAtMTE1Niw4ICYjNDM7MTE1Niw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCW15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pKTsKIAlpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovCiAJV1JJVEVfT05DRShzby0mZ3Q7dHhfZ2VuLCBteV9nZW4pOwotCXNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi8KLQlXUklURV9PTkNFKHNvLSZndDt0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NvLSZndDt0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7CiAJV1JJVEVfT05DRShzby0mZ3Q7Y2ZlY2hvLCAwKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYyBiL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMKaW5kZXggMjk5NDhjYjQ0YjdkMS4uNmQzYzUxMWQxZGVmOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jCkBAIC0xMjUsOSAmIzQzOzEyNSw4IEBAIHN0YXRpYyB2b2lkIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSkKIHsKIAlyZXVzZS0mZ3Q7c29ja3NbcmV1c2UtJmd0O251bV9zb2Nrc10gPSBzazsKLQkvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovCi0Jc21wX3dtYigpOwotCXJldXNlLSZndDtudW1fc29ja3MmIzQzOyYjNDM7OwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmV1c2UtJmd0O251bV9zb2NrcywgcmV1c2UtJmd0O251bV9zb2NrcyAmIzQzOyAxKTsKIAlyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpOwogfQogCkBAIC0xNDAsNyAmIzQzOzEzOSw4IEBAIHN0YXRpYyBib29sIF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV1c2UtJmd0O3NvY2tzW2ldID0gcmV1c2UtJmd0O3NvY2tzW3JldXNlLSZndDtudW1fc29ja3MgLSAxXTsKLQlyZXVzZS0mZ3Q7bnVtX3NvY2tzLS07CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtyZXVzZS0mZ3Q7bnVtX3NvY2tzLCByZXVzZS0mZ3Q7bnVtX3NvY2tzIC0gMSk7CiAJcmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNTgzLDExICYjNDM7NTgzLDkgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJCWdvdG8gb3V0OwogCiAJcHJvZyA9IHJjdV9kZXJlZmVyZW5jZShyZXVzZS0mZ3Q7cHJvZyk7Ci0Jc29ja3MgPSBSRUFEX09OQ0UocmV1c2UtJmd0O251bV9zb2Nrcyk7CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqLwomIzQzOwlzb2NrcyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtyZXVzZS0mZ3Q7bnVtX3NvY2tzKTsKIAlpZiAobGlrZWx5KHNvY2tzKSkgewotCQkvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqLwotCQlzbXBfcm1iKCk7Ci0KIAkJaWYgKCFwcm9nIHx8ICFza2IpCiAJCQlnb3RvIHNlbGVjdF9ieV9oYXNoOwogCkBAIC02MzQsMTMgJiM0Mzs2MzIsMTEgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9taWdyYXRlX3NvY2soc3RydWN0IHNvY2sgKnNrLAogCWlmICghcmV1c2UpCiAJCWdvdG8gb3V0OwogCi0Jc29ja3MgPSBSRUFEX09OQ0UocmV1c2UtJmd0O251bV9zb2Nrcyk7CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqLwomIzQzOwlzb2NrcyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtyZXVzZS0mZ3Q7bnVtX3NvY2tzKTsKIAlpZiAodW5saWtlbHkoIXNvY2tzKSkKIAkJZ290byBmYWlsdXJlOwogCi0JLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KLQlzbXBfcm1iKCk7Ci0KIAloYXNoID0gbWlncmF0aW5nX3NrLSZndDtza19oYXNoOwogCXByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtJmd0O3Byb2cpOwogCWlmICghcHJvZyB8fCBwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfU0tfUkVVU0VQT1JUX1NFTEVDVF9PUl9NSUdSQVRFKSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhY3QuYyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jCmluZGV4IDU2NTg2MGNjY2JhNmQuLmQ0ZjM5Zjk4ZTJjZjAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jCkBAIC0yNSw3ICYjNDM7MjUsNiBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhY3Rfb3BzOwogI2lmZGVmIENPTkZJR19HQUNUX1BST0IKIHN0YXRpYyBpbnQgZ2FjdF9uZXRfcmFuZChzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpCiB7Ci0Jc21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqLwogCWlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LSZndDt0Y2ZnX3B2YWwpKQogCQlyZXR1cm4gZ2FjdC0mZ3Q7dGNmX2FjdGlvbjsKIAlyZXR1cm4gZ2FjdC0mZ3Q7dGNmZ19wYWN0aW9uOwpAQCAtMzUsNyAmIzQzOzM0LDYgQEAgc3RhdGljIGludCBnYWN0X2RldGVybShzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpCiB7CiAJdTMyIHBhY2sgPSBhdG9taWNfaW5jX3JldHVybigmYW1wO2dhY3QtJmd0O3BhY2tldHMpOwogCi0Jc21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqLwogCWlmIChwYWNrICUgZ2FjdC0mZ3Q7dGNmZ19wdmFsKQogCQlyZXR1cm4gZ2FjdC0mZ3Q7dGNmX2FjdGlvbjsKIAlyZXR1cm4gZ2FjdC0mZ3Q7dGNmZ19wYWN0aW9uOwpAQCAtMTMzLDExICYjNDM7MTMxLDggQEAgc3RhdGljIGludCB0Y2ZfZ2FjdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLAogCWlmIChwX3Bhcm0pIHsKIAkJZ2FjdC0mZ3Q7dGNmZ19wYWN0aW9uID0gcF9wYXJtLSZndDtwYWN0aW9uOwogCQlnYWN0LSZndDt0Y2ZnX3B2YWwgICAgPSBtYXhfdCh1MTYsIDEsIHBfcGFybS0mZ3Q7cHZhbCk7Ci0JCS8qIE1ha2Ugc3VyZSB0Y2ZnX3B2YWwgaXMgd3JpdHRlbiBiZWZvcmUgdGNmZ19wdHlwZQotCQkgKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGdhY3RfbmV0X3JhbmQoKSAmYW1wOyBnYWN0X2RldGVybSgpCi0JCSAqLwotCQlzbXBfd21iKCk7Ci0JCWdhY3QtJmd0O3RjZmdfcHR5cGUgICA9IHBfcGFybS0mZ3Q7cHR5cGU7CiYjNDM7CQkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7Z2FjdC0mZ3Q7dGNmZ19wdHlwZSwgcF9wYXJtLSZndDtwdHlwZSk7CiAJfQogI2VuZGlmCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtnYWN0LSZndDt0Y2ZfbG9jayk7CkBAIC0xNjAsNyAmIzQzOzE1NSw4IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfZ2FjdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogI2lmZGVmIENPTkZJR19HQUNUX1BST0IKIAl7Ci0JdTMyIHB0eXBlID0gUkVBRF9PTkNFKGdhY3QtJmd0O3RjZmdfcHR5cGUpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdGNmX2dhY3RfaW5pdCgpICovCiYjNDM7CXUzMiBwdHlwZSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtnYWN0LSZndDt0Y2ZnX3B0eXBlKTsKIAogCWlmIChwdHlwZSkKIAkJYWN0aW9uID0gZ2FjdF9yYW5kW3B0eXBlXShnYWN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IEJhcnJpZXIgUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHN3YXBwaW5nIG91dCBpbnN0YW5jZXMgb2YgYHNtcF93bWIoKWAgJiM0MzsgYFdSSVRFX09OQ0UoKWAgYW5kIGBSRUFEX09OQ0UoKWAgJiM0MzsgYHNtcF9ybWIoKWAgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2UoKWAgYW5kIGBzbXBfbG9hZF9hY3F1aXJlKClgIGFjcm9zcyBhIGJ1bmNoIG9mIGtlcm5lbCBzdWJzeXN0ZW1zLiBGaXJzdCB0aG91Z2h0OiB0aGlzIGxvb2tzIGxpa2UgYSBtZW1vcnkgYmFycmllciByZWZhY3RvcmluZy4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgZnVuY3Rpb25hbGx5LCBkb2VzIHRoaXMgYWN0dWFsbHkgKmNoYW5nZSogYW55dGhpbmc/IE1lbW9yeSBvcmRlcmluZyBzZW1hbnRpY3MgYXJlIGVzc2VudGlhbGx5IHByZXNlcnZlZCwgYnV0IGFjcXVpcmUvcmVsZWFzZSBpcyBjbGVhbmVyIGFuZCBjYW4gYmUgbW9yZSBlZmZpY2llbnQgb3IgY29ycmVjdCBvbiBzb21lIGFyY2hpdGVjdHVyZXMsIGFuZCBpdCBhcHBlYXJzIHRoZXJlJiMzOTtzIGFuIGFjdHVhbCBidWdmaXggaW4gdGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmN1cnJlbmN5IGZpeCB0aGF0IGFkZHJlc3NlcyBwb3RlbnRpYWwgZGF0YSByYWNlcy4KCk5vdywgZG9lcyB0aGlzIG1lcml0IGZ1enppbmc/IEl0IGRlZmluaXRlbHkgY2hhbmdlcyBzb21lIGNvcmUga2VybmVsIGxvZ2ljIOKAkyBgZnMvYWlvYCwgYGV4dDRgLCBgZmlsZWAsIGBwaWRmc2AsIGBzdXBlcmAsIGB1c2VyX25hbWVzcGFjZWAsIGB2c3ByaW50ZmAsIGB2bGFuYCwgYGNhbmAsIGBzb2NrX3JldXNlcG9ydGAsIGFuZCBgYWN0X2dhY3RgLiBBbmQgaXQmIzM5O3MgYWx0ZXJpbmcgaG93IG1lbW9yeSBpcyBhY2Nlc3NlZDsgY2hhbmdpbmcgcGxhaW4gcmVhZHMvd3JpdGVzIHRvIGFjcXVpcmUvcmVsZWFzZSB3aGljaCBjaGFuZ2VzIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgYW5kIG1lbW9yeSBvcmRlcmluZyBzZW1hbnRpY3MuIFRoZSBwYXRjaCBpcywgaW4gZWZmZWN0LCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBHaXZlbiB0aGUgcHJvbXB0IGNyaXRlcmlhLCBpdCYjMzk7cyBub3QgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBhIGNvbnN0YW50IGNoYW5nZSwgdW5yZWFjaGFibGUgY29kZSwgb3IgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLgoKU28sIHllcywgaXTigJlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZCBhbmQgY291bGQgYmUgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgYWlvX2NvbXBsZXRlYCwgYGFpb19yZWFkX2V2ZW50c19yaW5nYCwgYGV4dDRfZ2V0X2dyb3Vwc19jb3VudGAsIGBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudGAsIGBleHQ0X3VwZGF0ZV9zdXBlcmAsIGBleHBhbmRfZmR0YWJsZWAsIGBleHBhbmRfZmlsZXNgLCBgZmRfaW5zdGFsbGAsIGBwaWRmZF9pbmZvYCwgYHN1cGVyX2NhY2hlX2NvdW50YCwgYG1hcF9pZF9yYW5nZV9kb3duYCwgYG1hcF9pZF9yYW5nZV91cGAsIGBtX3N0YXJ0YCwgYG1hcF93cml0ZWAsIGBmaWxsX3B0cl9rZXlgLCBgX19wdHJfdG9faGFzaHZhbGAsIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAsIGBpc290cF9zZW5kbXNnYCwgYF9fcmV1c2Vwb3J0X2FkZF9zb2NrYCwgYF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrYCwgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AsIGByZXVzZXBvcnRfbWlncmF0ZV9zb2NrYCwgYGdhY3RfbmV0X3JhbmRgLCBgZ2FjdF9kZXRlcm1gLCBgdGNmX2dhY3RfaW5pdGAsIGFuZCBgdGNmX2dhY3RfYWN0YC4KCkkgd2FudCB0byBwaWNrIHNvbWUgcmVhc29uYWJseSBub24taG90LXBhdGggQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzLiBgYWlvX2NvbXBsZXRlYCBhbmQgYGFpb19yZWFkX2V2ZW50c19yaW5nYCBhcmUgcHJldHR5IGhvdC1wYXRoLCBzbyB0aGF0JiMzOTtzIG91dC4gIGBleHQ0X3VwZGF0ZV9zdXBlcmAgZ2V0cyBjYWxsZWQgZHVyaW5nIHJlc2l6ZSwgdGhhdCYjMzk7cyBub3QgdG9vIGJhZC4gYGV4cGFuZF9maWxlc2Agd2hlbiBvcGVuaW5nIGZpbGVzLCBkZWNlbnQuICBgcGlkZmRfaW5mb2AgZm9yIFBJREZEIGlvY3RscywgdGhhdCBzb3VuZHMgZ29vZC4gIGBtYXBfd3JpdGVgIGZvciBgL3Byb2Mvc2VsZi91aWRfbWFwYCB3cml0ZXMsIHRoYXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZS4gYGlzb3RwX3NlbmRtc2dgIGZvciBzZW5kaW5nIENBTiBJU09UUCBtZXNzYWdlcywgYWxzbyBsb29rcyBnb29kLiBBbmQsIGB0Y2ZfZ2FjdF9pbml0YCB3aGVuIGNvbmZpZ3VyaW5nIHRjIGdhY3QsIHRoYXQmIzM5O3Mgbm90IGJhZC4KClNvIEkmIzM5O3ZlIHBpY2tlZCBhIGZldyBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBmdXp6ZWQ6Ci0gYGV4dDRfdXBkYXRlX3N1cGVyYAotIGBwaWRmZF9pbmZvYAotIGBtYXBfd3JpdGVgCi0gYGlzb3RwX3NlbmRtc2dgCi0gYHRjZl9nYWN0X2luaXRgCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqZXh0NF91cGRhdGVfc3VwZXJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9yZXNpemUuYz0xNDAwPXN0YXRpYyB2b2lkIGV4dDRfYWRkX292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xNDE3LSAqL1xuZnMvZXh0NC9yZXNpemUuYzoxNDE4OnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTktXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9uZXdfZmxleF9ncm91cF9kYXRhICpmbGV4X2dkKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz03MD1zdGF0aWMgaW50IGV4dDRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbmZzL2V4dDQvc3VwZXIuYzo3MTpzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYy03Mi1zdGF0aWMgaW50IGV4dDRfY29tbWl0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz02MTE2PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjI0OS0vKiBDb3B5IHN0YXRlIG9mIEVYVDRfU0Ioc2IpIGludG8gYnVmZmVyIGZvciBvbi1kaXNrIHN1cGVyYmxvY2sgKi9cbmZzL2V4dDQvc3VwZXIuYzo2MjUwOnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNjI1MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBFeHQ0IFN1cGVyYmxvY2sgVXBkYXRlcyBpbiBSZXNpemUgT3BlcmF0aW9ucyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgdGhlIGBleHQ0X3VwZGF0ZV9zdXBlcmAgZnVuY3Rpb24gd2l0aGluIGBmcy9leHQ0L3Jlc2l6ZS5jYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGF0IGNvbXBpbGF0aW9uIHVuaXQsIG1ha2luZyBpdCB1bmxpa2VseSB0byBiZSBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuCgpOb3csIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0ICphcmUqIGxpa2VseSBlbnRyeSBwb2ludHMgaW50byB0aGUgcmVzaXplIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN1cGVyYmxvY2sgdXBkYXRlIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgd2hhdCBicm9hZGVyIGNvbnRleHQgd2l0aGluIHRoZSByZXNpemUgcHJvY2VzcyBpdCYjMzk7cyBpbnZvbHZlZCBpbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhbmRsZSB1c2VyIHJlcXVlc3RzLCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLCBvciB0aG9zZSB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgdmlhIFZGUyBjYWxscy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcmVzaXppbmcgb3BlcmF0aW9uIHByb2JhYmx5IGxpZXMsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBgZXh0NF91cGRhdGVfc3VwZXJgIGZpdHMgaW50byB0aGF0IG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3VwZGF0ZV9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvcmVzaXplLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9yZXNpemUuYz0xNDAwPXN0YXRpYyB2b2lkIGV4dDRfYWRkX292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xNDExLS8qXG5mcy9leHQ0L3Jlc2l6ZS5jOjE0MTI6ICogZXh0NF91cGRhdGVfc3VwZXIoKSB1cGRhdGVzIHRoZSBzdXBlciBibG9jayBzbyB0aGF0IHRoZSBuZXdseSBhZGRlZFxuZnMvZXh0NC9yZXNpemUuYy0xNDEzLSAqIGdyb3VwcyBjYW4gYmUgc2VlbiBieSB0aGUgZmlsZXN5c3RlbS5cbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTctICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjE0MTg6c3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvcmVzaXplLmMtMTQxOS1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEgKmZsZXhfZ2QpXG4tLVxuZnMvZXh0NC9yZXNpemUuYz0xNTM4PXN0YXRpYyBpbnQgZXh0NF9mbGV4X2dyb3VwX2FkZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTU5NC1cbmZzL2V4dDQvcmVzaXplLmM6MTU5NTpcdGV4dDRfdXBkYXRlX3N1cGVyKHNiLCBmbGV4X2dkKTtcbmZzL2V4dDQvcmVzaXplLmMtMTU5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYSBmZXcga2V5IG9wZXJhdGlvbnMgaGVyZSwgYW5kIHRoZSBudWFuY2VzIGJldHdlZW4gdGhlbSBhcmUgaW1wb3J0YW50LiBGaXJzdCwgdGhlcmUmIzM5O3MgYGV4dDRfZmxleF9ncm91cF9hZGRgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1ldGFkYXRhIGxheW91dCBhbmQgaG93IHRoaXMgYWZmZWN0cyBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIGxhcmdlIGZpbGVzIGFuZCBzcGFyc2UgYWxsb2NhdGlvbi4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmFkZS1vZmZzIGluIHRlcm1zIG9mIGJsb2NrIGdyb3VwIGxheW91dCB3aGVuIGFkZGluZyBhIGZsZXhpYmxlIGdyb3VwPyBJIG5lZWQgdG8gd2VpZ2ggdGhlIGJlbmVmaXRzIG9mIHJlZHVjZWQgZnJhZ21lbnRhdGlvbiBhZ2FpbnN0IHRoZSBvdmVyaGVhZCBvZiBtb3JlIGNvbXBsZXggbWV0YWRhdGEgbWFuYWdlbWVudC4gVGhlbiwgSSYjMzk7bSBwaXZvdGluZyB0byBgZXh0NF9ncm91cF9hZGRgLiBUaGlzIGlzIHRoZSBtb3JlIGdlbmVyYWwgY2FzZSBvZiBhZGRpbmcgYSBibG9jayBncm91cDsgYXJlIHRoZXJlIGRpZmZlcmVuY2VzIGluIHRoZSBhbGdvcml0aG1zIGZvciBhbGxvY2F0aW5nIHRoZSBuZXcgYmxvY2sgZ3JvdXAgdnMgYSBmbGV4aWJsZSBncm91cD8gUGVyaGFwcyB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIG9uIGV4aXN0aW5nIGJsb2NrIGdyb3VwIGxheW91dCBvciBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24sIGFuZCB0aGVzZSBjYW4gaW5mb3JtIGRlY2lzaW9ucyBhYm91dCB0aGUgYmVzdCBhcHByb2FjaC4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBleHQ0X3Jlc2l6ZV9mc2AuIEFyZSB0aGVzZSBhZGRpdGlvbnMgcGFydCBvZiBhIHJlc2l6ZSBvcGVyYXRpb24/IElmIHNvLCB0aGUgY29uc3RyYWludHMgb2YgdGhlIHJlc2l6ZSAoZS5nLiwgd2hldGhlciBpdCYjMzk7cyBhbiBvbmxpbmUgb3Igb2ZmbGluZSByZXNpemUpIHdpbGwgZGljdGF0ZSB0aGUgYXZhaWxhYmxlIHN0cmF0ZWdpZXMgZm9yIGFkZGluZyBibG9jayBncm91cHMuIEl0JiMzOTtzIGEgcXVlc3Rpb24gb2YgaG93IHRvIGV4dGVuZCB0aGUgZmlsZSBzeXN0ZW0gZWZmZWN0aXZlbHksIHdoaWxlIG1pbmltaXppbmcgZGlzcnVwdGlvbiB0byBvbmdvaW5nIEkvTyBvcGVyYXRpb25zIGFuZCBlbnN1cmluZyBkYXRhIGludGVncml0eS4gVGhlIGdvYWwgaXMgZWZmaWNpZW50IGFuZCByb2J1c3QgZmlsZSBzeXN0ZW0gZXhwYW5zaW9uLCBhbmQgdGhlIHNlbGVjdGlvbiBvZiB0aGUgY29ycmVjdCBhZGRpdGlvbiBwcm9jZWR1cmUgaXMgY3JpdGljYWwgdG8gYWNoaWV2aW5nIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSpleHQ0X3Jlc2l6ZV9mc1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zMjg2PWV4dGVybiBpbnQgZXh0NF9ncm91cF9leHRlbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2V4dDQuaC0zMjg4LVx0XHRcdFx0ZXh0NF9mc2Jsa190IG5fYmxvY2tzX2NvdW50KTtcbmZzL2V4dDQvZXh0NC5oOjMyODk6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xuZnMvZXh0NC9leHQ0LmgtMzI5MC1leHRlcm4gdW5zaWduZWQgaW50IGV4dDRfbGlzdF9iYWNrdXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9yZXNpemUuYz0xOTEyPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X21ldGFfYmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTgtICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjE5OTk6aW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudClcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gRmlsZXN5c3RlbSBSZXNpemluZyoqCgpPa2F5LCBgZXh0NF9yZXNpemVfZnNgIGZlZWxzIGxpa2UgYSBnb29kLCBzb2xpZCBwb2ludCB0byBiZWdpbiBmb2N1c2luZyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGZpbGVzeXN0ZW0gcmVzaXppbmcgcHJvY2VzcyBhbmQgbGlrZWx5IGludm9sdmVzIG51bWVyb3VzIGNydWNpYWwgaW50ZXJhY3Rpb25zLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGF0LCBhIHF1aWNrIGNoZWNrLWluLiBMZXQmIzM5O3Mgc2VlIGhvdyBgcGlkZmRfaW5mb2AgdGllcyBpbnRvIHRoaXMuIFBlcmhhcHMgdGhlIFBJREZEIGluZm9ybWF0aW9uIGhhcyBzb21lIHJlbGV2YW50IGFzcGVjdHMgd2l0aCBob3cgcHJvY2Vzc2VzIGludGVyYWN0IGR1cmluZyBmaWxlc3lzdGVtIHJlc2l6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnBpZGZkX2luZm9cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYz0zMzk9c3RhdGljIF9fdTMyIHBpZGZzX2NvcmVkdW1wX21hc2soZW51bSB0YXNrX2R1bXBhYmxlIGR1bXBhYmxlKVxuLS1cbmZzL3BpZGZzLmMtMzY0LVxuZnMvcGlkZnMuYzozNjU6c3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9waWRmcy5jLTM2Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhpcyBkb21haW46CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBwaWRmZF9pbmZvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBpZGZkX2luZm9gIGhlcmUuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCBpdCYjMzk7cyBhICoqc3RhdGljKiogc3RydWN0dXJlIG9yIHZhcmlhYmxlLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY291cGxlIG9mIHRoaW5ncyB0byBtZS4gRmlyc3QsIGl0cyBzY29wZSBpcyBsaWtlbHkgbGltaXRlZCwgcHJvYmFibHkgd2l0aGluIGEgcGFydGljdWxhciBtb2R1bGUgb3Igc291cmNlIGZpbGUuIEFuZCBzZWNvbmRseSwgc2luY2UgaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGFueSBkYXRhIGl0IGhvbGRzIHdvbiYjMzk7dCBjaGFuZ2UgZHluYW1pY2FsbHkgdW5sZXNzIHRoZSBjb2RlIGV4cGxpY2l0bHkgdXBkYXRlcyBpdC4KCkFuZCB3aGVyZSBkb2VzIGl0IGNvbWUgaW50byBwbGF5PyBBaCwgeWVzLCBpdOKAmXMgdXNlZCB3aXRoaW4gYHBpZGZkX2lvY3RsYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBtZWFucyB0aGF0IHdoZW5ldmVyIHdl4oCZcmUgZGVhbGluZyB3aXRoIHRoZSBgcGlkZmRfaW9jdGxgIHN5c3RlbSBjYWxsLCB0aGUgY29udGVudHMgb2YgYHBpZGZkX2luZm9gIGFyZSBsaWtlbHkgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQgaW4gc29tZSB3YXkuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYHBpZGZkX2lvY3RsYCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGJ1dCB0aGlzIGNvbm5lY3Rpb24gaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhpcyBsaWtlbHkgY29udGFpbnMgY3J1Y2lhbCBpbmZvcm1hdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBvZiB0aGUgaW9jdGwgY2FsbCwgd2hpY2ggaXMgdHlwaWNhbGx5IGZvciBwcm9jZXNzIG1hbmFnZW1lbnQgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqcGlkZmRfaW9jdGxcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYz00OTc9c3RhdGljIGJvb2wgcGlkZnNfaW9jdGxfdmFsaWQodW5zaWduZWQgaW50IGNtZClcbi0tXG5mcy9waWRmcy5jLTUyNy1cbmZzL3BpZGZzLmM6NTI4OnN0YXRpYyBsb25nIHBpZGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL3BpZGZzLmMtNTI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyBgcGlkZmRfaW9jdGxgIGFuZCBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIGBwaWRmZF9pb2N0bGAgaXMgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGp1c3QgbGlrZSB0aGUgb3RoZXJzLiBJdCYjMzk7cyB0aGUgYGlvY3RsYCBoYW5kbGVyIGZvciB0aGUgcGlkZnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IEkgY2FuIGxldmVyYWdlIGluc3RlYWQ/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBpbnRlcmZhY2UuIEFoLCB3YWl0IGEgbWludXRlLCBJIHJlbWVtYmVyIG5vdyEgYHBpZGZkX2lvY3RsYCBpcyBhY3R1YWxseSByZWdpc3RlcmVkIHdpdGhpbiBgcGlkZnNfZmlsZV9vcGVyYXRpb25zYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGNsYXJpZmllcyBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBwaWRmcyBjb250ZXh0LiBHaXZlbiB0aGF0LCB1c2luZyBgcGlkZmRfaW9jdGxgIGRpcmVjdGx5IHNob3VsZCBiZSBwZXJmZWN0bHkgYWNjZXB0YWJsZSwgb3IgcG90ZW50aWFsbHkgYHN5c19waWRmZF9vcGVuYC4gVWx0aW1hdGVseSwgdGhvdWdoLCBgcGlkZmRfaW9jdGxgIHNlZW1zIGxpa2UgdGhlIGJlc3QgZml0IGhlcmUsIGdpdmVuIG15IGN1cnJlbnQgbmVlZC4gQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhhdCBkaXJlY3Rpb24gbm93LiBOZXh0LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBtYXBfd3JpdGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKm1hcF93cml0ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz04OTA9c3RhdGljIGJvb2wgdmVyaWZ5X3Jvb3RfbWFwKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTkzMS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjkzMjpzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy05MzMtXHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgYXJlIG15IG93bjoKCioqTXkgTWVudGFsIE1vZGVsIG9mIGBtYXBfd3JpdGVgKioKClJpZ2h0LCBzbyBgbWFwX3dyaXRlYC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciBmdW5jdGlvbnMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gYSBzcGVjaWZpYyBjb250ZXh0LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyAqc3RhdGljKjsgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIHdoaWNoIG9mdGVuIGltcGxpZXMgc29tZSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbCBvciB0aGF0IGl0JiMzOTtzIGNsb3NlbHkgdGllZCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS4KClRoZW4gSSBsb29rIGF0IHdoZXJlIGl0IGlzIGNhbGxlZCBmcm9tLiBBaGEhIGBwcm9jX3VpZF9tYXBfd3JpdGVgLCBgcHJvY19naWRfbWFwX3dyaXRlYCwgYW5kIGBwcm9jX3Byb2ppZF9tYXBfd3JpdGVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYG1hcF93cml0ZWAgaXMgdGhlICpjb3JlKiB3cml0ZXIgZnVuY3Rpb24gZm9yICptYXBwaW5ncyogb2YgVUlEcywgR0lEcywgYW5kIHByb2pJRHMuIFRob3NlIGBwcm9jXypfbWFwX3dyaXRlYCBmdW5jdGlvbnMgYXJlIG1vc3QgbGlrZWx5IHRoZSBlbnRyeSBwb2ludHMgZm9yIHdyaXRpbmcgdGhlc2UgSUQgbWFwcGluZ3MgaW50byB0aGUga2VybmVsJiMzOTtzIHByb2Nlc3MgbmFtZXNwYWNlcywgZWl0aGVyIHZpYSBgL3Byb2NgIGZpbGVzeXN0ZW0gZW50cmllcyBvciBhIHJlbGF0ZWQgaW50ZXJmYWNlLiBUaGUgc3RydWN0dXJlIG9mIHRoaXMgcGF0dGVybiBpcyBwcmV0dHkgc3RhbmRhcmQsIEkgY2FuIGV4cGVjdCB0aGUgYG1hcF93cml0ZWAgdG8gbGlrZWx5IGJlIGRlYWxpbmcgd2l0aCB0aGUgYWN0dWFsIGRhdGEgc3RydWN0dXJlIG1vZGlmaWNhdGlvbnMuIEl0cyBzdGF0aWMtbmVzcyByZWluZm9yY2VzIHRoaXMgZGVzaWduLCBhcyBpdCYjMzk7cyB0aGUgY29yZSB3b3JraG9yc2UsIGFuZCB0aGUgbmFtZXNwYWNlLXNwZWNpZmljIHdyaXRlcnMgaGFuZGxlIGFueSB2YWxpZGF0aW9uIG9yIHNldHVwLiBJIGNhbiBndWVzcyB0aGVyZSBpcyBkYXRhIHNhbml0aXphdGlvbiBnb2luZyBvbiBpbiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhleSBoYW5kbGUgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnByb2NfdWlkX21hcF93cml0ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmg9MTk5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJvY19wcm9qaWRfc2VxX29wZXJhdGlvbnM7XG5pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmg6MjAwOmV4dGVybiBzc2l6ZV90IHByb2NfdWlkX21hcF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTtcbmluY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaC0yMDEtZXh0ZXJuIHNzaXplX3QgcHJvY19naWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTkzMj1zdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEyMS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjExMjI6c3NpemVfdCBwcm9jX3VpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMTIzLVx0XHRcdCAgIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBwb3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipGb2N1c2luZyBJbiBvbiB0aGUgS2VybmVsJiMzOTtzIElTTy1UUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBgcHJvY191aWRfbWFwX3dyaXRlYCBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGxlYWQsIGJ1dCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGRldG91ciBhbmQgZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aGF0JiMzOTtzIGxpa2VseSBtb3JlIHJlbGV2YW50IHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gYGlzb3RwX3NlbmRtc2dgLiBXaGlsZSBgcHJvY191aWRfbWFwX3dyaXRlYCBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5IGFuZCB1c2VyLUlEIG1hcHBpbmcgd2l0aGluIHRoZSBwcm9jZXNzIGNvbnRleHQsIGBpc290cF9zZW5kbXNnYCBoYW5kbGVzIHRoZSBhY3R1YWwgdHJhbnNtaXNzaW9uIG9mIElTTy1UUCBtZXNzYWdlcywgc28gaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgSVNPLVRQIGltcGxlbWVudGF0aW9uIGxpZXMuIEtub3dpbmcgaG93IHRoYXQgd29ya3Mgd2lsbCBsaWtlbHkgaW5mb3JtIHRoZSByZXN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKmlzb3RwX3NlbmRtc2dcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTEwODg9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTEwMy1cbm5ldC9jYW4vaXNvdHAuYzoxMTA0OnN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2Nhbi9pc290cC5jLTExMDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJU09UUCBhbmQgRnV6emluZyoqCgpPa2F5LCBzbyBgaXNvdHBfc2VuZG1zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHJlZ2lzdGVyZWQgd2l0aGluIGBpc290cF9vcHNgLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEga25vd24gcXVhbnRpdHkuIEkgd2FzIGJyaWVmbHkgY29uc2lkZXJpbmcgd2hldGhlciBgaXNvdHBfYmluZGAgb3IgYGlzb3RwX3NldHNvY2tvcHRgIG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUsIHBlcmhhcHMgbm9uLXN0YXRpYywgY2FuZGlkYXRlcyBmb3IgZm9jdXNlZCBhbmFseXNpcy4gQnV0LCBhcyB0aGUgc2VuZG1zZyBoYW5kbGVyLCBgaXNvdHBfc2VuZG1zZ2Agc2VlbXMgcGVyZmVjdGx5IGZpbmUuIFRoZSBmdXp6ZXIgdW5kZXJzdGFuZHMgaG93IHRvIGludGVyYWN0IHdpdGggQ0FOIElTT1RQIHNvY2tldHMgdmlhIGBzZW5kbXNnYCwgc28gdGFyZ2V0aW5nIHRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYHRjZl9nYWN0X2luaXRgLiBTZWUgd2hhdCB0aGF0IGNhbiB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnRjZl9nYWN0X2luaXRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYWN0LmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGdhY3RfcG9saWN5W1RDQV9HQUNUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy01MC1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjUxOnN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTUyLVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqQW5hbHl6aW5nIHRoZSBHbG9iYWwgQWN0aW9uIENsYXNzaWZpZXIgKEdBQykgSW5pdGlhbGl6YXRpb24gYW5kIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB0Y2ZfZ2FjdGAgY29kZS4gSSBzZWUgdGhhdCB0aGUgYHRjZl9nYWN0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBHQUMsIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gSSYjMzk7dmUgYWxzbyB0cmFja2VkIGRvd24gdGhhdCBpdCYjMzk7cyByZWdpc3RlcmVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UgdmlhIGBhY3RfZ2FjdF9vcHMuaW5pdGAuIE1ha2VzIHNlbnNlLCBzbyBmYXIuCgpOb3cgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhICpub24qLXN0YXRpYyBlbnRyeSBwb2ludC4gSSYjMzk7dmUgZm91bmQgYHRjZl9nYWN0X2FjdGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpwZXJmb3JtcyogdGhlIGFjdGlvbiBvciBwcm9jZXNzaW5nLiBUaGUgY3JpdGljYWwgZGV0YWlsIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBtYXJrZWQgYXMgYFRDX0lORElSRUNUX1NDT1BFYC4gVGhpcyB0aHJvd3MgYSBiaXQgb2YgYSBjdXJ2ZWJhbGwuIFdoYXQgdGhhdCAqdHlwaWNhbGx5KiBtZWFucyBpcyB0aGF0IGB0Y2ZfZ2FjdF9hY3RgIGlzIG5vbi1zdGF0aWMgKGF2YWlsYWJsZSBleHRlcm5hbGx5KSwgKnVubGVzcyogdGhleSYjMzk7dmUgZGlzYWJsZWQgaW5kaXJlY3QgY2FsbHMsIGF0IHdoaWNoIHBvaW50IGl0JiMzOTtzIHVzdWFsbHkgYHN0YXRpY2AsIG9yIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VlIHdoaWNoIGlzIHRoZSBjYXNlLiBCYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiwgaXQgY291bGQgYmUgY2FsbGVkIGRpcmVjdGx5LCBpbmRpcmVjdGx5IG9yIGl0IGlzIHN0YXRpYyBhbmQgbm90IGNhbGxlZCBleHRlcm5hbGx5LiBUaGlzIGltcGFjdHMgaG93IGFuZCB3aGVyZSB0aGUgR0FDIGNhbiBiZSBpbnZva2VkLiBJIGhhdmUgdG8gbG9vayBhIGxpdHRsZSBkZWVwZXIgdG8gc2VlIGhvdyBpdCYjMzk7cyBhY3R1YWxseSB1c2VkIGluIGEgcHJhY3RpY2FsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSp0Y2ZfZ2FjdF9hY3RcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGF0IERpZmY6IFRDX0lORElSRUNUX1NDT1BFIGFuZCBza2IqKgoKT2theSwgdGhlIGRpZmbigKYgaGFuZyBvbi4gYFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfZ2FjdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixgIC4uLiB0aGF0IGxpbmUganVtcHMgb3V0IGF0IG1lLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBgdGNmX2dhY3RfYWN0YCwgdGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyBhY3Rpb24gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLCByaWdodD8gQW5kIGBza2JgLCBvZiBjb3Vyc2UsIGlzIHRoZSBjcnVjaWFsIHNvY2tldCBidWZmZXIuIEJ1dCB0aGUgYFRDX0lORElSRUNUX1NDT1BFYCBpcyB3aGF0IGhhcyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2hhbmdlIGhhcyBvY2N1cnJlZCBhcm91bmQgdGhpcyBmdW5jdGlvbiBjYWxsLiBXaGF04oCZcyB1c2luZyBpdD8gV2h5IGlzIGl0IHRoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhY3QuYz01MT1zdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMTMzLVx0XHRnYWN0LVx1MDAzZXRjZmdfcHZhbCAgICA9IG1heF90KHUxNiwgMSwgcF9wYXJtLVx1MDAzZXB2YWwpO1xubmV0L3NjaGVkL2FjdF9nYWN0LmM6MTM0Olx0XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi9cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTEzNS1cdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlLCBwX3Bhcm0tXHUwMDNlcHR5cGUpO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTE0OC1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjE0OTpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0xNTAtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jPTI4OD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhY3Rfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTI5MS1cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjI5MjpcdC5hY3RcdFx0PVx0dGNmX2dhY3RfYWN0LFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjkzLVx0LnN0YXRzX3VwZGF0ZVx0PVx0dGNmX2dhY3Rfc3RhdHNfdXBkYXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcyMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEFzeW5jaHJvbm91cyBJL08gTWVjaGFuaXNtcyoqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYHRjZl9nYWN0X2FjdGAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIG15IGN1cnJlbnQgbGluZSBvZiBpbnF1aXJ5LiBXaGVyZSBkb2VzIHRoaXMgZ28/IERvZXMgaXQgdGllIGludG8gdGhlIGFzeW5jaHJvbm91cyBJL08gcGF0aHdheXM/CgpIbW0sIEkmIzM5O20gYWxzbyB0aGlua2luZyBvZiBgZnMvYWlvLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFzeW5jaHJvbm91cyBJL08uIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYGFpb19yZWFkX2V2ZW50c19yaW5nYCBnZXRzIGNhbGxlZCBmcm9tIGByZWFkX2V2ZW50c2AuIFNvLCB0aGF0IHNlZW1zIGtleSwgc2luY2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gcmVhZGluZyBldmVudHMgcmVsYXRlZCB0byBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbCBjaGFpbiBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGV2ZW50IGhhbmRsaW5nIGZsb3cuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0Y2ZfZ2FjdF9hY3RgIGFuZCBhc3luY2hyb25vdXMgSS9PLiBJIG11c3QgZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSpyZWFkX2V2ZW50c1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9haW8uYz0xMzQ2PXN0YXRpYyBib29sIGFpb19yZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxuLS1cbmZzL2Fpby5jLTEzNjItXG5mcy9haW8uYzoxMzYzOnN0YXRpYyBsb25nIHJlYWRfZXZlbnRzKHN0cnVjdCBraW9jdHggKmN0eCwgbG9uZyBtaW5fbnIsIGxvbmcgbnIsXG5mcy9haW8uYy0xMzY0LVx0XHRcdHN0cnVjdCBpb19ldmVudCBfX3VzZXIgKmV2ZW50LFxuLS1cbnRvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYz0xNDkxPXN0YXRpYyBpbnQga3ZtX2xpdmVfb3Blbl9ldmVudHMoc3RydWN0IHBlcmZfa3ZtX3N0YXQgKmt2bSlcbi0tXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmMtMTU1MS1cbnRvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYzoxNTUyOnN0YXRpYyBpbnQgcmVhZF9ldmVudHMoc3RydWN0IHBlcmZfa3ZtX3N0YXQgKmt2bSlcbnRvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYy0xNTUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKlN0YXRpYyBGdW5jdGlvbiBEZWVwIERpdmU6IGByZWFkX2V2ZW50c2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgcmVhZF9ldmVudHNgIGlzIGRlZmluZWQgYXMgYSBgc3RhdGljYCBmdW5jdGlvbi4gVGhpcyBpc24mIzM5O3Qgc3VycHJpc2luZyBnaXZlbiBpdHMgbGlrZWx5IHJvbGUgaW4gYSBsb3ctbGV2ZWwgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgaXQmIzM5O3Mgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBJL08gZXZlbnQgaGFuZGxpbmcuCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgc3lzX2lvX2dldGV2ZW50c2Agc3Ryb25nbHkgaW1wbGllcyBhIGNvcmUgZnVuY3Rpb24gd2l0aGluIHRoZSBJL08gZXZlbnQgcmV0cmlldmFsIHN5c3RlbS4gVGhpcyBzZXR1cCBpcyB0eXBpY2FsOyBgc3lzX2lvX2dldGV2ZW50c2AgaXMgbGlrZWx5IHRoZSBleHBvc2VkIHN5c3RlbSBjYWxsIGludGVyZmFjZSB0aGF0IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCwgYW5kIGByZWFkX2V2ZW50c2AgaXMgdGhlIHVuZGVybHlpbmcgd29ya2hvcnNlIHRoYXQgYWN0dWFsbHkgcHVsbHMgdGhlIGV2ZW50IGRhdGEuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nICpob3cqIGl0IHByb2Nlc3NlcyB0aGUgcmVxdWVzdCBhbmQgKndoYXQqIG9wdGltaXphdGlvbnMgaXQgdXNlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoaXMgc3RhdGljIG5hdHVyZSBpcyBjb25jZWFsaW5nIGFueSBkYXRhIHJhY2VzIG9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGFuZCBpZiB0aGUgb3B0aW1pemF0aW9uIGlzIHRocmVhZCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnN5c19pb19nZXRldmVudHNcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTMxND1hc21saW5rYWdlIGxvbmcgc3lzX2lvX2NhbmNlbChhaW9fY29udGV4dF90IGN0eF9pZCwgc3RydWN0IGlvY2IgX191c2VyICppb2NiLFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTMxNS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fZXZlbnQgX191c2VyICpyZXN1bHQpO1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjMxNjphc21saW5rYWdlIGxvbmcgc3lzX2lvX2dldGV2ZW50cyhhaW9fY29udGV4dF90IGN0eF9pZCxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0zMTctXHRcdFx0XHRsb25nIG1pbl9ucixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRm9jdXNpbmcgTXkgQW5hbHlzaXMqKgoKUmlnaHQsIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHN5bWJvbCB0byByZWFsbHkgZGlnIGludG8uIEl0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgdGhhdCBvZnRlbiBtZWFucyBpdCYjMzk7cyBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKQnV0IHdhaXQsIHdoYXQgYWJvdXQgYGZzL2ZpbGUuY2A/IFRoYXQgZmVlbHMgbGlrZSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZSB0b28sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBJL08uIEkgYmV0IHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGxvdy1sZXZlbCBpbnRlcmFjdGlvbiBkZXRhaWxzLiBBaCwgYW5kIGhlcmUmIzM5O3MgYSBwb3RlbnRpYWxseSB1c2VmdWwgbm90ZSwgYGV4cGFuZF9maWxlc2AgaXMgY2FsbGVkIGZyb20gYGFsbG9jX2ZkYC4gR29vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSphbGxvY19mZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maWxlLmM9NTQzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X2ZkKHN0cnVjdCBmZHRhYmxlICpmZHQsIHVuc2lnbmVkIGludCBzdGFydClcbi0tXG5mcy9maWxlLmMtNTY3LSAqL1xuZnMvZmlsZS5jOjU2ODpzdGF0aWMgaW50IGFsbG9jX2ZkKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGZsYWdzKVxuZnMvZmlsZS5jLTU2OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIGBhbGxvY19mZGAgRnVuY3Rpb24mIzM5O3MgU2NvcGUgYW5kIFVzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWxsb2NfZmRgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBoYXMgaW50ZXJuYWwgbGlua2FnZSwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGRlc2lnbiBjaG9pY2UsIGxpa2VseSBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBmaWxlIGRlc2NyaXB0b3IgYWxsb2NhdGlvbiBsb2dpYyBhbmQgcHJldmVudCBhY2NpZGVudGFsIG1pc3VzZSBvciBtb2RpZmljYXRpb24gZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gSXQgYWxzbyBpbXBsaWVzIGl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBmb3IgZ2VuZXJhbCB1c2UuCgpOb3csIHRoZSBjb2RlIG1lbnRpb25zIHRoYXQgYGFsbG9jX2ZkYCBpcyBjYWxsZWQgZnJvbSBgZ2V0X3VudXNlZF9mZF9mbGFnc2AuIFRoaXMgaXMgdGhlIGtleS4gR2l2ZW4gdGhhdCwgSSBjYW4gZGVkdWNlIHRoYXQgYGdldF91bnVzZWRfZmRfZmxhZ3NgIGxpa2VseSBwZXJmb3JtcyBzb21lIGhpZ2hlci1sZXZlbCB0YXNrIGludm9sdmluZyBmaW5kaW5nIG9yIGNyZWF0aW5nIGEgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYGFsbG9jX2ZkYCBpcyB0aGUgbG93LWxldmVsIHV0aWxpdHkgZnVuY3Rpb24gaXQgY2FsbHMgdG8gYWN0dWFsbHkgZ3JhYiBhbiBhdmFpbGFibGUgZGVzY3JpcHRvci4gYGdldF91bnVzZWRfZmRfZmxhZ3NgIHByb2JhYmx5IHNldHMgZmxhZ3MgZHVyaW5nIHRoaXMgYWxsb2NhdGlvbiwgdGhvdWdoIHdpdGhvdXQgYSBsb29rIGF0IGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCwgSSBjYW4gb25seSBzcGVjdWxhdGUgb24gdGhlIGRldGFpbHMuCgpUaGUgZmFjdCB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGludGVydHdpbmVkIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHByb2JhYmx5IGEgdGlnaHQgY291cGxpbmcgYmV0d2VlbiB0aGUgdGFzayBvZiAqZmluZGluZyogdGhlIGRlc2NyaXB0b3IgKGluIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCksICphbGxvY2F0aW5nKiBpdCAodXNpbmcgYGFsbG9jX2ZkYCksIGFuZCBwb3RlbnRpYWxseSBzZXR0aW5nIGZsYWdzIG9uIHRoZSBuZXcgZGVzY3JpcHRvci4gTWFrZXMgc2Vuc2UuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgbW9kdWxhcml0eSBvZiB0aGUgY29kZSBhIGJpdCBiZXR0ZXIuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGF0IGBhbGxvY19mZGAgaXMgYSAqdmVyeSogaW1wb3J0YW50IHV0aWxpdHkgZm9yIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKmdldF91bnVzZWRfZmRfZmxhZ3NcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmlsZS5jPTYxMz1pbnQgX19nZXRfdW51c2VkX2ZkX2ZsYWdzKHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBsb25nIG5vZmlsZSlcbi0tXG5mcy9maWxlLmMtNjE3LVxuZnMvZmlsZS5jOjYxODppbnQgZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncylcbmZzL2ZpbGUuYy02MTkte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsZS5oPTkxPWV4dGVybiBpbnQgX19nZXRfdW51c2VkX2ZkX2ZsYWdzKHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBsb25nIG5vZmlsZSk7XG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo5MjpleHRlcm4gaW50IGdldF91bnVzZWRfZmRfZmxhZ3ModW5zaWduZWQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9maWxlLmgtOTMtZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9mZCh1bnNpZ25lZCBpbnQgZmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBTb2NrZXQgUmV1c2UgYW5kIFVudXNlZCBGaWxlIERlc2NyaXB0b3JzKioKCk9rYXksIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCDigJMgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCwgc29saWQgcG9pbnQgdG8gc3RhcnQgd2l0aC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgZmlsZSBkZXNjcmlwdG9ycywgYW5kIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgc29ja2V0IHJldXNlIHRvdWNoZXMgdGhpbmdzLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgcmVsYXRlZCB0byB0aGUgcmV1c2Vwb3J0IGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgY29uc2lkZXIgYG5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNgLiAqVGhhdCYjMzk7cyogd2hlcmUgdGhlIGNvcmUgcmV1c2Vwb3J0IGxvZ2ljIHJlc2lkZXMsIHNvIHRoYXQmIzM5O3Mgb2J2aW91c2x5IHJlbGV2YW50LiBJIHNlZSBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBhbmQgYHJldXNlcG9ydF9taWdyYXRlX3NvY2tgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgYW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIHN0YXRlIG9mIHNvY2tldHMuIEFyZSB3ZSBjcmVhdGluZyBuZXcgRkRzLCBtaWdyYXRpbmcgZXhpc3Rpbmcgb25lcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgZGVlcGVyIGRpdmUgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgVGhhdCBEaWZmKioKCk9rYXksIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIE15IGluaXRpYWwgcGFzcyB3YXMgcXVpY2ssIGJ1dCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBJIHNhdyBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpbiB0aGUgY2hhbmdlcy4gVGhhdCYjMzk7cyBub3QganVzdCBhbnkgcmFuZG9tIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSB3aGVuIG9wdGltaXppbmcgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgc29ja2V0IGJpbmRpbmcuICYjMzQ7cmV1c2Vwb3J0LCYjMzQ7IG9mIGNvdXJzZSwgaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIEkgd29uZGVyIHdoeSB0aGlzIGlzIHJlbGV2YW50LiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIG9yIG1heWJlIGEgY29ycmVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHQgb2Ygd2hlcmUgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgaXMgYmVpbmcgaW1wbGVtZW50ZWQuIElzIHRoaXMgYWRkcmVzc2luZyBhIHNwZWNpZmljIHNjYWxhYmlsaXR5IGJvdHRsZW5lY2s/IEEgcGFydGljdWxhciBlZGdlIGNhc2U/IExldCYjMzk7cyB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgY2hhbmdlIGZpdHMgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBzZWUgdGhlIG92ZXJhbGwgcmF0aW9uYWxlLiBJdCBjb3VsZCBjb21wbGV0ZWx5IGNoYW5nZSB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JldXNlcG9ydF9zZWxlY3Rfc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00MD1zdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9nZXRfaW5jb21pbmdfY3B1KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTQxLXtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NDI6XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLiAqL1xubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00My1cdFdSSVRFX09OQ0UocmV1c2UtXHUwMDNlaW5jb21pbmdfY3B1LCByZXVzZS1cdTAwM2VpbmNvbWluZ19jcHUgJiM0MzsgMSk7XG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00Nj1zdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9wdXRfaW5jb21pbmdfY3B1KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTQ3LXtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NDg6XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLiAqL1xubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00OS1cdFdSSVRFX09OQ0UocmV1c2UtXHUwMDNlaW5jb21pbmdfY3B1LCByZXVzZS1cdTAwM2VpbmNvbWluZ19jcHUgLSAxKTtcbi0tXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTY0PXZvaWQgcmV1c2Vwb3J0X3VwZGF0ZV9pbmNvbWluZ19jcHUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtODItXHQgKlxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo4MzpcdCAqIFBhaXJlZCB3aXRoIFJFQURfT05DRSgpIGluIHJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKCkuXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTg0LVx0ICovXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00OTc9c3RhdGljIHN0cnVjdCBzb2NrICpydW5fYnBmX2ZpbHRlcihzdHJ1Y3Qgc29ja19yZXVzZXBvcnQgKnJldXNlLCB1MTYgc29ja3MsXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01MjYtXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjUyNzpzdGF0aWMgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UsXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTUyOC1cdFx0XHRcdFx0XHQgIHUzMiBoYXNoLCB1MTYgbnVtX3NvY2tzKVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTU4LS8qKlxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo1NTk6ICogIHJldXNlcG9ydF9zZWxlY3Rfc29jayAtIFNlbGVjdCBhIHNvY2tldCBmcm9tIGFuIFNPX1JFVVNFUE9SVCBncm91cC5cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTYwLSAqICBAc2s6IEZpcnN0IHNvY2tldCBpbiB0aGUgZ3JvdXAuXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NjctICovXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjU2ODpzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTY5LVx0XHRcdFx0ICAgdTMyIGhhc2gsXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01OTktXHRcdGlmICghc2syKVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo2MDA6XHRcdFx0c2syID0gcmV1c2Vwb3J0X3NlbGVjdF9zb2NrX2J5X2hhc2gocmV1c2UsIGhhc2gsIHNvY2tzKTtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjAxLVx0fVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjA2LX1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NjA3OkVYUE9SVF9TWU1CT0wocmV1c2Vwb3J0X3NlbGVjdF9zb2NrKTtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjA4LVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM9NjE4PXN0cnVjdCBzb2NrICpyZXVzZXBvcnRfbWlncmF0ZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTY2MS1cdGlmICghbnNrKVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo2NjI6XHRcdG5zayA9IHJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKHJldXNlLCBoYXNoLCBzb2Nrcyk7XG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTY2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwODcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBhbmQgU3RyaW5nIEZvcm1hdHRpbmcgVnVsbmVyYWJpbGl0aWVzKioKCkFscmlnaHQsIHNvIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgYW5kIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiB3aGF0JiMzOTtzIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCB3aGF0IGRhdGEgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIHRvIGV2YWx1YXRlIGFueSBwb3NzaWJsZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgcmVsYXRlZCB0byBzb2NrZXQgcmV1c2UsIGVzcGVjaWFsbHkgaW4gbXVsdGktdGhyZWFkZWQgb3IgY29ubmVjdGlvbiBwb29saW5nIGVudmlyb25tZW50cy4KCk15IGluc3RpbmN0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIHN0cmluZyBmb3JtYXR0aW5nIGlzc3Vlcywgc28gSSB0aGluayB0byBteXNlbGY6ICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBsaWIvdnNwcmludGYuY2AuJiMzNDsgV2h5PyBXZWxsLCBgdnNwcmludGZgIGFuZCBpdHMgdmFyaWFudHMgKGxpa2UgYHZzbnByaW50ZmAsIGBzcHJpbnRmYCBldGMuKSBhcmUgbm90b3Jpb3VzIGZvciBmb3JtYXQgc3RyaW5nIHZ1bG5lcmFiaWxpdGllcy4gSWYgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgaXMgcGFzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gYSBmb3JtYXQgc3RyaW5nIGZ1bmN0aW9uLCBpdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcuIEV2ZW4gaWYgbm90IGRpcmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgZmxvdy4KCk15IG1pbmQgdGhlbiBxdWlja2x5IGp1bXBzIHRvIHNlYXJjaGluZyBmb3IgYSBjb25uZWN0aW9uOiBJcyBgZmlsbF9wdHJfa2V5YCBpbnZvbHZlZCBpbiBnZW5lcmF0aW5nIHRoZXNlIGtleXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIHZhZ3VlbHkgcmVtZW1iZXIgc2VlaW5nIGl0IGNhbGxlZCBmcm9tIGBwdHJfa2V5X3dvcmtmbmAgb3Igc29tZXRoaW5nIGluIHRoYXQgZG9tYWluLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBhbmQgYGZpbGxfcHRyX2tleWAgaXMgdXNlZCB0byBjcmVhdGUgb3IgaW5mbHVlbmNlIGFueSBzdHJpbmcgaW5wdXQsIGVzcGVjaWFsbHkgaWYgYSBwb2ludGVyIG9yIGtleSBvciBzaW1pbGFyLCBpbnRvIGEgYHZzcHJpbnRmYCBvciB0aGUgbGlrZSwgdGhhdCBjb3VsZCBiZWNvbWUgYSB2ZWN0b3IuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRhdGEgZmxvdyB0byBiZSBjZXJ0YWluLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nOiBpcyB0aGVyZSBhbnkgY2hhbmNlIHRoZSBnZW5lcmF0ZWQga2V5IGNvdWxkIGNvbnRhaW4gZm9ybWF0IHNwZWNpZmllcnMsIGFuZCBtaWdodCB0aGlzIGJlIGV4cGxvaXRhYmxlPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gSSYjMzk7bSB0cnlpbmcgdG8gYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxsX3B0cl9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdnNwcmludGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdnNwcmludGYuYz03NTk9c3RhdGljIHNpcGhhc2hfa2V5X3QgcHRyX2tleSBfX3JlYWRfbW9zdGx5O1xubGliL3ZzcHJpbnRmLmMtNzYwLVxubGliL3ZzcHJpbnRmLmM6NzYxOnN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxubGliL3ZzcHJpbnRmLmMtNzYyLXtcbi0tXG5saWIvdnNwcmludGYuYz03NzA9c3RhdGljIGludCBfX2luaXQgdnNwcmludGZfaW5pdF9oYXNodmFsKHZvaWQpXG5saWIvdnNwcmludGYuYy03NzEte1xubGliL3ZzcHJpbnRmLmM6NzcyOlx0c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmaWxsX3B0cl9rZXlfbmIgPSB7IC5ub3RpZmllcl9jYWxsID0gZmlsbF9wdHJfa2V5IH07XG5saWIvdnNwcmludGYuYzo3NzM6XHRleGVjdXRlX3dpdGhfaW5pdGlhbGl6ZWRfcm5nKFx1MDAyNmZpbGxfcHRyX2tleV9uYik7XG5saWIvdnNwcmludGYuYy03NzQtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgSW53YXJkOiBXaGVyZSBEb2VzIFRoaXMgTWF0dGVyPyoqCgpPa2F5LCBzbyBgZmlsbF9wdHJfa2V5YCBpcyBqdXN0IGFib3V0IGluaXRpYWxpemF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgdGhhdCBjcml0aWNhbC4gQW5kIGBfX3B0cl90b19oYXNodmFsYCBpcyBvbmx5IHRpZWQgdG8gdGhlIGAlcGAgZm9ybWF0dGluZywgd2hpY2gsIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLCBpcyBwcm9iYWJseSBhIG1pbm9yIGRldGFpbCwgYW5kIHRoZXJlZm9yZSBub3QgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3cuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZSBgdmxhbmAgYXJlYSBtaWdodCBiZSBrZXkuCgpNeSBmb2N1cyBzaG91bGQgYmUgc2hpZnRlZCB0byB3aGF0IGNhbGxzIGByZWdpc3Rlcl92bGFuX2RldmAsIGFzIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSB0aGVyZS4gSSBzaG91bGQgbG9vayBpbnRvIGBuZXQvODAyMXEvdmxhbi5jYCBhbmQgc2VlIHdoZXJlIEkgc2hvdWxkIGdvIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqcmVnaXN0ZXJfdmxhbl9kZXZcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0LzgwMjFxL3ZsYW4uYz0xMjU9aW50IHZsYW5fY2hlY2tfcmVhbF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuLmMtMTQ1LVxubmV0LzgwMjFxL3ZsYW4uYzoxNDY6aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbm5ldC84MDIxcS92bGFuLmMtMTQ3LXtcbi0tXG5uZXQvODAyMXEvdmxhbi5oPTE1MD12b2lkIHZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvODAyMXEvdmxhbi5oOjE1MTppbnQgcmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC84MDIxcS92bGFuLmgtMTUyLXZvaWQgdW5yZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMjYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiBSZWxldmFudCBLZXJuZWwgRnVuY3Rpb25zKioKCk9rYXksIGByZWdpc3Rlcl92bGFuX2RldmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMgZXhwbG9yYXRpb24uIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYGV4dDRfcmVzaXplX2ZzYCwgYHBpZGZkX2lvY3RsYCwgYHByb2NfdWlkX21hcF93cml0ZWAsIGBpc290cF9zZW5kbXNnYCwgYHRjZl9nYWN0X2FjdGAsIGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYW5kLCBvZiBjb3Vyc2UsIGByZWdpc3Rlcl92bGFuX2RldmAuCgpIbW0sIGBzeXNfaW9fZ2V0ZXZlbnRzYC4uLiByaWdodCwgdGhhdCYjMzk7cyBhIHN5c2NhbGwuIEltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBrZWVwIGluIG1pbmQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIGB0Y2ZfZ2FjdF9hY3RgLiBBaCwgeWVzLCBjb25maXJtZWQsIHRoYXQmIzM5O3MgaW4gYG5ldC9zY2hlZC9hY3RfZ2FjdC5jYC4gR29vZCwgZ29vZC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IHdpdGg6CgoqICAgYGV4dDRfcmVzaXplX2ZzYDogdGhhdCYjMzk7cyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19FWFQ0X0ZTYC4KKiAgIGBwaWRmZF9pb2N0bGA6IEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGhlcmUuLi4gaXMgaXQgcmVsYXRlZCB0byBgQ09ORklHX1BJRF9JTl9DT05URVhUX1NXSVRDSEVTYD8gTm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBPciBwZXJoYXBzIGBDT05GSUdfUElERlNgPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHBpZGZkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUElERlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg5MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7dmUgaGl0IGEgc25hZy4gTXkgYnJhaW4ganVzdCBkaWQgYSBkb3VibGUtdGFrZTsgYGZzL3BpZGZzLmNgLi4ud2FpdCBhIG1pbnV0ZSwgdGhhdCBzb3VyY2UgZmlsZSwgaXQmIzM5O3MgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0JiMzOTtzIG5vdCB0aGUgbm9ybS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGF0IHBsYXkgaGVyZS4gV2h5IHdvdWxkbiYjMzk7dCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgdW5pdmVyc2FsbHkgaW5jbHVkZWQ/IElzIHRoZXJlIGFuIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW5jeT8gQSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24/IFNvbWUgc29ydCBvZiBmZWF0dXJlIGZsYWc/IFRoaXMgcmFpc2VzIGFsbCBzb3J0cyBvZiBxdWVzdGlvbnMgYWJvdXQgcG9ydGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUuIElzIHRoZXJlIGFuICNpZmRlZiBibG9jayBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgaW52b2x2ZWQ/IFRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGJlaW5nIGRyaXZlbiBmcm9tLCBzaW5jZSBub3cgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGUtdGltZSBkZWNpc2lvbiBjcml0ZXJpYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGlkZnNcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEwPW9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG4tLVxuZnMvTWFrZWZpbGUtMTctXHRcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcbmZzL01ha2VmaWxlOjE4Olx0XHRrZXJuZWxfcmVhZF9maWxlLm8gbW50X2lkbWFwcGluZy5vIHJlbWFwX3JhbmdlLm8gcGlkZnMubyBcXFxuZnMvTWFrZWZpbGUtMTktXHRcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKktlcm5lbCBDb21waWxhdGlvbiBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBnb2VzIHRvIGNvbXBpbGF0aW9uLiBJdCBhbHdheXMgZG9lcywgcmVhbGx5LiBUaGUgY29yZSBjb25jZXB0IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBgcHJvY191aWRfbWFwX3dyaXRlYCwgaGFzIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYENPTkZJR19VU0VSX05TYC4gSXQmIzM5O3MgZW1iZWRkZWQgaW4gbXkgbWluZDogdXNlciBuYW1lc3BhY2VzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCB3aWxsIGJlaGF2ZS4gS25vd2luZyBpdCYjMzk7cyAqYWx3YXlzKiBjb21waWxlZCBtZWFucyB0aGlzIGRlcGVuZGVuY3kgaXMgaGFyZC13aXJlZCBhbmQgY2Fubm90IGJlIG9wdGlvbmFsbHkgZXhjbHVkZWQuIFRoZXJlZm9yZSwgaG93IGl0IGhhbmRsZXMgY29uZmlndXJhdGlvbiBhbmQgcGVybWlzc2lvbnMgd2lsbCBiZSBjcml0aWNhbGx5IGFmZmVjdGVkIGJ5IGhvdyBgQ09ORklHX1VTRVJfTlNgIGhhcyBiZWVuIHNldCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJfTlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0Mzg9Y29uZmlnIElQQ19OU1xuLS1cbmluaXQvS2NvbmZpZy0xNDQ1LVxuaW5pdC9LY29uZmlnOjE0NDY6Y29uZmlnIFVTRVJfTlNcbmluaXQvS2NvbmZpZy0xNDQ3LVx0Ym9vbCBcJiMzNDtVc2VyIG5hbWVzcGFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUxMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKk15IElTT1RQIFNlbmQgRnVuY3Rpb24mIzM5O3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgaXNvdHBfc2VuZG1zZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBsb2dpYyBhbmQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcmUgY29udGluZ2VudCBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfQ0FOX0lTT1RQYC4gSXQmIzM5O3MgYSBzaW1wbGUsIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LCBidXQgaXQmIzM5O3MgKmNyaXRpY2FsKi4gV2l0aG91dCBgQ09ORklHX0NBTl9JU09UUGAgZW5hYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCwgdGhhdCBgaXNvdHBfc2VuZG1zZ2AgZnVuY3Rpb24gc2ltcGx5IHdvbiYjMzk7dCBiZSBjb21waWxlZCwgYW5kIGFueSBhdHRlbXB0IHRvIHVzZSBpdCB3aWxsIGZhaWwgc3BlY3RhY3VsYXJseS4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCBmb3IgZW5zdXJpbmcgdGhlIElTT1RQIHRyYW5zcG9ydCBsYXllciBpcyBhY3R1YWxseSBwcmVzZW50IHdoZW4gdGhlIENBTiBzdWJzeXN0ZW0gYXR0ZW1wdHMgdG8gdXRpbGl6ZSBpdC4gSXQgaXMgcGFyYW1vdW50IHRoYXQgdGhpcyBmZWF0dXJlIGlzIGJvdGggYXZhaWxhYmxlIGFuZCBlbmFibGVkIGZvciB0aGUgYXBwbGljYXRpb24gdG8gZnVuY3Rpb24gYXBwcm9wcmlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBTl9JU09UUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldHdvcmsgVHJhZmZpYyBTaGFwaW5nIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayB0cmFmZmljIHNoYXBpbmcgZnVuY3Rpb25hbGl0aWVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgR2VuZXJpYyBBY3Rpb24gKEdBQ1QpIG1vZHVsZS4gVGhlIGlkZW50aWZpZXIgYHRjZl9nYWN0X2FjdGAgaW1tZWRpYXRlbHkgc2lnbmFscyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgJiMzNDthY3Rpb24mIzM0OyBwYXJ0IG9mIHRoaXMsIHRoZSBmaW5hbCBzdGVwIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKFRDKSBwcm9jZXNzLCBub3QgYSBjbGFzc2lmaWVyIG9yIG90aGVyIHVwc3RyZWFtIGNvbXBvbmVudC4gQW5kIHRoZSBkaXJlY3QgcmVmZXJlbmNlIHRvIGBDT05GSUdfTkVUX0FDVF9HQUNUYCBjb25maXJtcyB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IGV2YWx1YXRpbmcgdGhlIEdBQ1QgbW9kdWxlJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWVhbnMgSSYjMzk7bSBmb2N1c2VkIG9uIHdoYXQgYWN0aW9ucyBjYW4gYmUgdGFrZW4gb24gcGFja2V0cyBhZnRlciB0aGV5JiMzOTt2ZSBiZWVuIGNsYXNzaWZpZWQgYW5kIGZpbHRlcmVkLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGltcGxlbWVudGluZyBwb2xpY2llcywgZnJvbSBzaW1wbGUgcG9saWNpbmcgYW5kIGRyb3BwaW5nIHBhY2tldHMgdG8gbW9yZSBjb21wbGV4IHRhc2tzLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBpcyBjcml0aWNhbC4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIHRoZSBHQUNUIGFjdGlvbiBzaW1wbHkgd29uJiMzOTt0IGJlIGF2YWlsYWJsZSwgc2V2ZXJlbHkgbGltaXRpbmcgdHJhZmZpYyBjb250cm9sIG9wdGlvbnMgYXQgdGhpcyBwb2ludCBpbiB0aGUgcGFja2V0IGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0dBQ1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NzE1PWNvbmZpZyBORVRfQUNUX1BPTElDRVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcyNS1cbm5ldC9zY2hlZC9LY29uZmlnOjcyNjpjb25maWcgTkVUX0FDVF9HQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MjctXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGFjdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc3lzX2lvX2dldGV2ZW50c2AgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvIGBDT05GSUdfQUlPYC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbm5lY3Rpb24gaGVyZS4gYHN5c19pb19nZXRldmVudHNgIGlzLCBvZiBjb3Vyc2UsIHRoZSBzeXN0ZW0gY2FsbCBmb3IgcmV0cmlldmluZyBhc3luY2hyb25vdXMgSS9PIChBSU8pIGV2ZW50cy4gVGhpbmtpbmcgYWJvdXQgaXQgdGhpcyB3YXkgbmFycm93cyBkb3duIHRoZSBjb250ZXh0LiBUaGUgcHJlc2VuY2Ugb2YgYENPTkZJR19BSU9gIGRpY3RhdGVzIHdoZXRoZXIgdGhlIGVudGlyZSBBSU8gZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgd2l0aGluIHRoZSBrZXJuZWwuIFNvLCBpZiBgQ09ORklHX0FJT2AgaXMgbm90IGVuYWJsZWQsIGBzeXNfaW9fZ2V0ZXZlbnRzYCBpcyBlZmZlY3RpdmVseSBkaXNhYmxlZCwgcmlnaHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSU8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MDU9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE5MTUtXG5pbml0L0tjb25maWc6MTkxNjpjb25maWcgQUlPXG5pbml0L0tjb25maWctMTkxNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFJTyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQxMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNoZWNraW5nIENvbXBpbGF0aW9uIEZsYWdzIGFuZCBTb2NrZXQgUmV1c2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYGdldF91bnVzZWRfZmRfZmxhZ3NgIOKAkyB0aGF0IG9uZSYjMzk7cyBhbHdheXMgY29tcGlsZWQgaW4sIG5vIHByb2JsZW0gdGhlcmUuIEJ1dCB3aGF0IGFib3V0IGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgPyBJcyB0aGF0IGNvbnNpc3RlbnRseSBwYXJ0IG9mIHRoZSBidWlsZD8gSSAqdGhpbmsqIGl0IGlzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgbWV0aWN1bG91cyBhYm91dCB0aGVzZSB0aGluZ3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29ja2V0IG9wdGlvbnMgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIE1ha2luZyBzdXJlIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSBjb21waWxlZCBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfcmV1c2Vwb3J0XFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xMy1cdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTQ6XHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTUtXHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgVkxBTiBDb25maWd1cmF0aW9uKioKClllcywgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiBkZWFsaW5nIHdpdGggVkxBTiBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19WTEFOXzgwMjFRYC4gVGhhdCBtYWNybywgaWYgZGVmaW5lZCwgaXMgd2hhdCBlbmFibGVzIHRoZSBgcmVnaXN0ZXJfdmxhbl9kZXZgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgY29ybmVyc3RvbmUgZm9yIFZMQU4gZGV2aWNlIHJlZ2lzdHJhdGlvbi4gV2l0aG91dCB0aGlzIGJlaW5nIHNldCwgdGhlIFZMQU4gZnVuY3Rpb25hbGl0eSBpcyBub3QgZ29pbmcgdG8gd29yay4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkxBTl84MDIxUSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZy01LVxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxubmV0LzgwMjFxL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTIxLVxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxubmV0LzgwMjFxL0tjb25maWctMjMtXHRib29sIFwmIzM0O0dWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcbm5ldC84MDIxcS9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDtNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRG91YmxlLUNoZWNraW5nIGV4dDQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGp1c3QgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QuIEJlZm9yZSB3ZSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQuIEl0IHNvdW5kcyBiYXNpYywgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IHRoYXQgbWlzc2luZyBkZXBlbmRlbmNpZXMgY2FuIHdhc3RlIGEgaHVnZSBhbW91bnQgb2YgdGltZSwgYW5kIGNyZWF0ZSBpc3N1ZXMgdGhhdCBhcmUgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcuIFNvLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0IGlzIGFjdHVhbGx5IGNvbXBpbGVkIGluLiBObyBhc3N1bXB0aW9ucyBoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZsaWN0cyB3aXRoIGFueSBvdGhlciByZWxhdGVkIHNldHRpbmdzIHRoYXQgbWlnaHQgZGlzYWJsZSBpdC4gVGhpcyBpbml0aWFsIGNoZWNrIHdpbGwgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgRVhUNF9GU2AsIGBVU0VSX05TYCwgYENBTl9JU09UUGAsIGBORVRfQUNUX0dBQ1RgLCBgQUlPYCwgYW5kIGBWTEFOXzgwMl9RYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gY29uc2lkZXIuIExldCBtZSBzZWUuLi4gYGV4dDRfcmVzaXplX2ZzYCwgYHBpZGZkX2lvY3RsYCwgYHByb2NfdWlkX21hcF93cml0ZWAsIGBpc290cF9zZW5kbXNnYCwgYHRjZl9nYWN0X2FjdGAsIGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYW5kIGByZWdpc3Rlcl92bGFuX2RldmAuCgpIbW0sIG5vdywgaG9sZCBvbi4gYHN5c19pb19nZXRldmVudHNgLi4uIHRoYXQmIzM5O3MgYSBzeXNjYWxsLCBpc24mIzM5O3QgaXQ/IFN5emthbGxlciBwcm9iYWJseSBjYWxscyBpdCBgaW9fZ2V0ZXZlbnRzYCwgcmlnaHQ/IE1heWJlIGByZWFkX2V2ZW50c2Agd291bGQgYmUgYmV0dGVyPyBPciBwZXJoYXBzIGBhaW9fcmVhZF9ldmVudHNfcmluZ2A/IFRoYXQgb25lIGlzIHN0YXRpYy4uLiBidXQgaXQmIzM5O3MgdGhlIG1vZGlmaWVkIG9uZS4gWWVhaCwgbm8sIGxldCYjMzk7cyBzdGljayB3aXRoIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBzbyB0aGF0JiMzOTtzIHRoZSBjbGVhcmVzdCB0byB1c2UuCgpIYW5nIG9uIGEgc2Vjb25kLCB0aGF0IGBwaWRmZF9pb2N0bGAgaXMgYWxzbyBzdGF0aWMuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBpcyBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgZm9yIHBpZGZkLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGJlc3QgcG9zc2libGUgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSpwaWRmZF9vcGVuXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHN5c19waWRmZF9vcGVuYCBTeXN0ZW0gQ2FsbCoqCgpPa2F5LCBgc3lzX3BpZGZkX29wZW5gLi4uIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgdGhlIHN0YW5kYXJkIHdheXMgdG8gaW50ZXJhY3Qgd2l0aCBwcm9jZXNzZXMg4oCTIGBmb3JrYCwgYGV4ZWN2ZWAsIHNpZ25hbHMsIG1vbml0b3JpbmcgdmlhIHByb2Nlc3MgSUQuIEJ1dCBgcGlkZmRfb3BlbmA/IFRoaXMgc3VnZ2VzdHMgYSBuZXcsIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvICpmaWxlIGRlc2NyaXB0b3JzKi4gVGhlICYjMzQ7ZmQmIzM0OyBpbiB0aGUgbmFtZSBpcyB0aGUga2V5LiBJdCYjMzk7cyBub3QganVzdCBhIFBJRCwgaXTigJlzIGEgKmRlc2NyaXB0b3IqIG9mIHRoZSBwcm9jZXNzIGl0c2VsZiwgbWFuYWdlZCB0aHJvdWdoIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0sIGxpa2UgZXZlcnl0aGluZyBlbHNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBoYXMgdG8gb2ZmZXIgc29tZXRoaW5nIGJleW9uZCB0aGUgZXhpc3RpbmcgUElELWJhc2VkIG1lY2hhbmlzbXMuIFdoeSBpbnRyb2R1Y2UgYSBuZXcgc3lzY2FsbCBpZiB0aGVyZSB3YXNuJiMzOTt0IGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlPyBDb3VsZCBpdCBiZSByZWxhdGVkIHRvIHNlY3VyaXR5LCBuYW1lc3BhY2UgaXNvbGF0aW9uLCBwZXJoYXBzIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nLCBvciBiZXR0ZXIgaW50ZWdyYXRpb24gd2l0aCBjYXBhYmlsaXRpZXM/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIGl0IFBPU0lYLWNvbXBsaWFudD8gRG9lcyBpdCBhZGRyZXNzIHJhY2UgY29uZGl0aW9ucyBhc3NvY2lhdGVkIHdpdGggUElEIHJldXNlPyBEb2VzIGl0IHByb3ZpZGUgZmluZXItZ3JhaW5lZCBjb250cm9sIG92ZXIgcHJvY2VzcyBvcGVyYXRpb25zIHRoYW4gc2lnbmFscyBvciBgcHRyYWNlYD8gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBodWdlIGlmIHRoaXMgaXMgdGhlIGNhc2UsIGFuZCBvcGVucyB1cCB0aGUgcG90ZW50aWFsIGZvciBpbXByb3ZlZCBwcm9jZXNzIG1vbml0b3JpbmcsIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiwgYW5kIHN5c3RlbS1sZXZlbCB0b29scy4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqc3lzX3BpZGZkX29wZW5cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTkxMD1hc21saW5rYWdlIGxvbmcgc3lzX3NldG5zKGludCBmZCwgaW50IG5zdHlwZSk7XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6OTExOmFzbWxpbmthZ2UgbG9uZyBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtOTEyLWFzbWxpbmthZ2UgbG9uZyBzeXNfc2VuZG1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1zZyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGFza19sb2NhbF9zdG9yYWdlX2hlbHBlcnMuaC0xNi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oOjE3OnN0YXRpYyBpbmxpbmUgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rhc2tfbG9jYWxfc3RvcmFnZV9oZWxwZXJzLmgtMTgte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkLmg9MjI5PXN0YXRpYyBpbmxpbmUgaW50IHdhaXRfZm9yX3BpZChwaWRfdCBwaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmQuaC0yNTMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oOjI1NDpzdGF0aWMgaW5saW5lIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkLmgtMjU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGtleSBzeXN0ZW0gY2FsbCBvciBmdW5jdGlvbiByZWxhdGVkIHRvIGBwaWRmZF9pbmZvYC4gSSBrbm93IGBzeXNfcGlkZmRfb3BlbmAgaXMgdGhlIHN5c2NhbGwgdGhhdCBnZXRzIHRoaW5ncyBzdGFydGVkLCBidXQgYHBpZGZkX2luZm9gIGl0c2VsZiBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYHBpZGZkX2lvY3RsYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIHNwZWNpZmljIGBzeXNfcGlkZmRfaW9jdGxgIHN5c2NhbGw/IE5vLCBpdCYjMzk7cyBqdXN0IGEgc3RhbmRhcmQgYGlvY3RsYCBvbiB0aGUgcGlkZmQuIFRoYXQgbWVhbnMgdGhlIGVudHJ5IHBvaW50IGlzIHRoZSBnZW5lcmljIGBzeXNfaW9jdGxgLCB3aGljaCBpcyB3YXkgdG9vIGJyb2FkIHRvIGJlIHRydWx5IHVzZWZ1bC4KCkhvd2V2ZXIsIGBwaWRmZF9pb2N0bGAgaXMgKnN0YXRpYyouIEhtbS4gVXN1YWxseSwgdGhhdCB3b3VsZCBiZSBhIHByb2JsZW0gZm9yIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciwgYnV0IGl0IGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gSG9uZXN0bHksIGl0IG1pZ2h0IGV2ZW4gYmUgdGhlIHBlcmZlY3QgZm9jdXMgc3ltYm9sIGluIHRoaXMgY2FzZSwgYSB0aWdodCBhbmQgcmVsZXZhbnQgb25lLiBOb3csIHRoZSBrZXkgaXMgd2hldGhlciBgcGlkZmRfaW9jdGxgICppcyogYWN0dWFsbHkgaW5saW5lZCBvciBub3QuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWZvcmUgSSBjYW4gYmUgc3VyZSBpZiBJJiMzOTt2ZSBoaXQgdGhlIHN3ZWV0IHNwb3QuIExldCYjMzk7cyBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGlkZmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9waWRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3BpZGZzLmM9NDk3PXN0YXRpYyBib29sIHBpZGZzX2lvY3RsX3ZhbGlkKHVuc2lnbmVkIGludCBjbWQpXG4tLVxuZnMvcGlkZnMuYy01MjctXG5mcy9waWRmcy5jOjUyODpzdGF0aWMgbG9uZyBwaWRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9waWRmcy5jLTUyOS17XG4tLVxuZnMvcGlkZnMuYz02ODE9c3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL3BpZGZzLmMtNjg2LVxuZnMvcGlkZnMuYzo2ODc6XHRyZXR1cm4gcGlkZmRfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xuZnMvcGlkZnMuYy02ODgtfVxuLS1cbmZzL3BpZGZzLmM9NzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBpZGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9waWRmcy5jLTcxNi0jZW5kaWZcbmZzL3BpZGZzLmM6NzE3Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHBpZGZkX2lvY3RsLFxuZnMvcGlkZnMuYy03MTgtI2lmZGVmIENPTkZJR19DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3Qgc29tZXRoaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzICpub3QqIGdvaW5nIHRvIGJlIGlubGluZWQuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIEluIHRoZSBjb250ZXh0IG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGFueXRoaW5nIHRoYXQmIzM5O3Mgbm90IGlubGluZWQgaXMgYSByZWQgZmxhZywgYXMgaXQgY3JlYXRlcyBhbiBpbnRlcmVzdGluZyBjYWxsLWNoYWluIHRoYXQgY291bGQgYmUgbGV2ZXJhZ2VkLiBgcGlkZmRfaW9jdGxgIGp1bXBzIG91dCBhcyBhIHByZXR0eSBjb21wZWxsaW5nIGZvY3VzIHBvaW50IGdpdmVuIHRoZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdGFrZSBhIGRlZXBlciBkaXZlIGhlcmUuCgpMZXQmIzM5O3Mgc2VlLi4uIG5leHQgSSBzaG91bGQgY2hlY2sgb3V0IGBwcm9jX3VpZF9tYXBfd3JpdGVgLiBHb29kLCBpdCYjMzk7cyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgZGlyZWN0bHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgaW5pdGlhbCBleHBsb3JhdGlvbiwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKVGhlbiB3ZSYjMzk7dmUgZ290IGBpc290cF9zZW5kbXNnYC4gQWgsIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggKmNvdWxkKiByZWR1Y2UgaXRzIGFjY2Vzc2liaWxpdHksIGJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGJlaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaXMgaW50cmlndWluZy4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgZGVjbGFyZWQgc3RhdGljLCB0aGUgY2FsbC1jaGFpbiB0aGF0IGNhbiBwYXNzIGl0IGFzIGEgZnVuY3Rpb24gcG9pbnRlciBoYXMgdG8gYmUgc2NydXRpbml6ZWQsIGFzIGl0IGNvdWxkIGJlIHJlYWNoZWQgZnJvbSBzb21ld2hlcmUgd2UmIzM5O3JlIG5vdCBleHBlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL2lzb3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTEwODg9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTEwMy1cbm5ldC9jYW4vaXNvdHAuYzoxMTA0OnN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2Nhbi9pc290cC5jLTExMDUte1xuLS1cbm5ldC9jYW4vaXNvdHAuYz0yMDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGlzb3RwX29wcyA9IHtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMjAyMC1cdC5nZXRzb2Nrb3B0ID0gaXNvdHBfZ2V0c29ja29wdCxcbm5ldC9jYW4vaXNvdHAuYzoyMDIxOlx0LnNlbmRtc2cgPSBpc290cF9zZW5kbXNnLFxubmV0L2Nhbi9pc290cC5jLTIwMjItXHQucmVjdm1zZyA9IGlzb3RwX3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgS2VybmVsIFN5bWJvbCBBbmFseXNpcyoqCgpPa2F5LCBzbyBgaXNvdHBfc2VuZG1zZ2AgaXMgbG9va2luZyBnb29kIOKAkyBubyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuIE5vdywgbGV04oCZcyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBvdGhlciBjYW5kaWRhdGVzIEkmIzM5O3ZlIGJlZW4gY29uc2lkZXJpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4KCmB0Y2ZfZ2FjdF9hY3RgIC0gUmlnaHQsIGBUQ19JTkRJUkVDVF9TQ09QRWAgb24gdGhhdCBvbmUsIG1lYW5pbmcgaXQmIzM5O3Mgbm9uLXN0YXRpYywgYWxsIGdvb2QuIFRoZW4sIGBzeXNfaW9fZ2V0ZXZlbnRzYCwgeWVwLCB0aGF0JiMzOTtzIGEgc3lzY2FsbCwgc28gd2UmIzM5O3JlIHNldCB0aGVyZSBhcyB3ZWxsLiBNb3Zpbmcgb24sIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCDigJMgYWxzbyBub24tc3RhdGljLiBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpcyBleHBvcnRlZCwgYW5kIGByZWdpc3Rlcl92bGFuX2RldmAgdG9vLgoKQWxyaWdodCwgdGhhdCBjb25maXJtcyB0aGUgZm9sbG93aW5nIGFzIHRoZSBjb3JlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOgotICAgYGV4dDRfcmVzaXplX2ZzYAotICAgYHBpZGZkX2lvY3RsYAotICAgYHByb2NfdWlkX21hcF93cml0ZWAKLSAgIGBpc290cF9zZW5kbXNnYAotICAgYHRjZl9nYWN0X2FjdGAKLSAgIGBzeXNfaW9fZ2V0ZXZlbnRzYAotICAgYGdldF91bnVzZWRfZmRfZmxhZ3NgCi0gICBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYAotICAgYHJlZ2lzdGVyX3ZsYW5fZGV2YAoKQW5kIGluIHRlcm1zIG9mIHJlbGV2YW50IGNvbmZpZ3MsIEkmIzM5O20gbm90aW5nOgotICAgYEVYVDRfRlNgCi0gICBgVVNFUl9OU2AKLSAgIGBDQU5fSVNPVFBgCi0gICBgTkVUX0FDVF9HQUNUYAotICAgYEFJT2AKLSAgIGBWTEFOXzgwMjFRYAoKV2FpdCwgaGFuZyBvbi4gSSYjMzk7bSBqdXN0IHJlY2FsbGluZyB0aGF0IEkgc2F3IGBzdXBlcl9jYWNoZV9jb3VudGAgaW4gYGZzL3N1cGVyLmNgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGluZ3MgdGhhdCBhcmUgc3RhdGljLiBJcyB0aGVyZSBhIGJldHRlciBmb2N1cyBzeW1ib2wgcmVsYXRlZCB0byB0aGF0PyBNYXliZSBgbW91bnRfZnNgIG9yIGB2ZnNfZ2V0X3RyZWVgLi4uIGJ1dCBoYW5nIG9uLCBgc3VwZXJfY2FjaGVfY291bnRgIGlzIGZpbmUgYWN0dWFsbHkuIEkgcmVjYWxsIGl0JiMzOTtzIHN0YXRpYywgYnV0IEkgdGhpbmsgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMsIGJ1dCBJJiMzOTttIHRoaW5raW5nIHdlJiMzOTtyZSBvayBmb3Igbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdXBlcl9jYWNoZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYz0xOTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbi0tXG5mcy9zdXBlci5jLTI1MC1cbmZzL3N1cGVyLmM6MjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuZnMvc3VwZXIuYy0yNTItXHRcdFx0XHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5mcy9zdXBlci5jLTI2My1cdCAqIGxpc3RfbHJ1X3Nocmlua19jb3VudCgpIG9yIHNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoKS4gQ291bnRzIGNhblxuZnMvc3VwZXIuYzoyNjQ6XHQgKiBjaGFuZ2UgYmV0d2VlbiBzdXBlcl9jYWNoZV9jb3VudCBhbmQgc3VwZXJfY2FjaGVfc2Nhbiwgc28gd2UgcmVhbGx5XG5mcy9zdXBlci5jLTI2NS1cdCAqIGRvbiYjMzk7dCBuZWVkIGxvY2tzIGhlcmUuXG4tLVxuZnMvc3VwZXIuYz0zMzY9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbi0tXG5mcy9zdXBlci5jLTQwNS1cdHMtXHUwMDNlc19zaHJpbmstXHUwMDNlc2Nhbl9vYmplY3RzID0gc3VwZXJfY2FjaGVfc2NhbjtcbmZzL3N1cGVyLmM6NDA2Olx0cy1cdTAwM2VzX3Nocmluay1cdTAwM2Vjb3VudF9vYmplY3RzID0gc3VwZXJfY2FjaGVfY291bnQ7XG5mcy9zdXBlci5jLTQwNy1cdHMtXHUwMDNlc19zaHJpbmstXHUwMDNlYmF0Y2ggPSAxMDI0O1xuLS1cbmZzL3N1cGVyLmM9MTkzNT1pbnQgdmZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9zdXBlci5jLTE5NjMtXHQgKiBzdXBlcl93YWtlKCkgY29udGFpbnMgYSBtZW1vcnkgYmFycmllciB3aGljaCBhbHNvIGNhcmUgb2ZcbmZzL3N1cGVyLmM6MTk2NDpcdCAqIG9yZGVyaW5nIGZvciBzdXBlcl9jYWNoZV9jb3VudCgpLiBXZSBwbGFjZSBpdCBiZWZvcmUgc2V0dGluZ1xuZnMvc3VwZXIuYy0xOTY1LVx0ICogU0JfQk9STiBhcyB0aGUgZGF0YSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHR3byBmdW5jdGlvbnMgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRhcmdldCBGdW5jdGlvbiBMaXN0KioKCk9rYXksIHNvIGBzdXBlcl9jYWNoZV9jb3VudGAgc2VlbXMgZmluZSwgYnV0IGdldHRpbmcgYXQgc2hyaW5rZXJzIGRpcmVjdGx5IGlzIHByb3ZpbmcgZGlmZmljdWx0LiBJIHRoaW5rIGB2ZnNfZ2V0X3RyZWVgIGlzIGEgYmV0dGVyIGVudHJ5IHBvaW50LCBlc3BlY2lhbGx5IHNpbmNlIGl0IHJlbGF0ZXMgdG8gbW91bnQgcGF0aHMgZGlyZWN0bHkuIExldCYjMzk7cyBhZGQgdGhhdC4KCkhvbGQgb24sIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCBpcyBjYWxsZWQgZHVyaW5nIGZpbGUgb3BlbmluZywgc28gaXQmIzM5O3MgYSBzdXBlciBob3QgcGF0aCEgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gUmVtb3ZlIGl0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsuIGBzeXNfaW9fZ2V0ZXZlbnRzYD8gSXQmIzM5O3MgYSBzcGVjaWZpYyBzeXNjYWxsLCBub3QgYSBnZW5lcmljIGhvdCBwYXRoLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5LiBgcGlkZmRfaW9jdGxgPyBTcGVjaWZpYyB0byBwaWRmZC4gR29vZC4gYHByb2NfdWlkX21hcF93cml0ZWA/IFVzZXIgbmFtZXNwYWNlIHNwZWNpZmljLiBGaW5lLiBIb3cgYWJvdXQgYGlzb3RwX3NlbmRtc2dgPyBTcGVjaWZpYyB0byBDQU4gSVNPVFAuIFllcC4gYHRjZl9nYWN0X2FjdGA/IFRDIEdBQ1Qgc3BlY2lmaWMuIE9rYXkuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgPyBTcGVjaWZpYyB0byBTT19SRVVTRVBPUlQsIGl0JiMzOTtzIGZpbmUuIGByZWdpc3Rlcl92bGFuX2RldmA/IFZMQU4gc3BlY2lmaWMuIFl1cC4gRmluYWxseSwgYGV4dDRfcmVzaXplX2ZzYD8gRXh0NCByZXNpemUsIHBlcmZlY3QuCgpTbyB0aGUgcmVmaW5lZCBsaXN0IGlzOgoKKiAgIGBleHQ0X3Jlc2l6ZV9mc2AKKiAgIGBwaWRmZF9pb2N0bGAKKiAgIGBwcm9jX3VpZF9tYXBfd3JpdGVgCiogICBgaXNvdHBfc2VuZG1zZ2AKKiAgIGB0Y2ZfZ2FjdF9hY3RgCiogICBgc3lzX2lvX2dldGV2ZW50c2AKKiAgIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgCiogICBgcmVnaXN0ZXJfdmxhbl9kZXZgCiogICBgdmZzX2dldF90cmVlYAoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBgdmZzX2dldF90cmVlYC4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBtb3VudGluZyBmaWxlc3lzdGVtcywgd2hpY2ggaXMgaW5mcmVxdWVudCwgc28gaXQmIzM5O3Mgbm90IGEgc3VwZXIgaG90IHBhdGguIEdvb2QuCgpPa2F5LCBsZXQmIzM5O3MgcmUtZXZhbHVhdGUgdGhlIG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpcyBjYWxsZWQgZHVyaW5nIHBhY2tldCByZWNlcHRpb24gd2l0aCBTT19SRVVTRVBPUlQsIHNvIGl0JiMzOTtzIG9ubHkgYSBob3QgcGF0aCB3aXRoIHRoYXQgc29ja2V0IG9wdGlvbiBjb25maWd1cmVkLCBidXQgc3RpbGwgc3BlY2lmaWMgZW5vdWdoLiBgdGNmX2dhY3RfYWN0YCBpcyBmb3IgcGFja2V0IHByb2Nlc3Npbmcgd2hlbiBHQUNUIGlzIGNvbmZpZ3VyZWQsIHNwZWNpZmljLiBgc3lzX2lvX2dldGV2ZW50c2AgaXMgYSBzeXN0ZW0gY2FsbCwgbm90IGdlbmVyaWMuIGBwaWRmZF9pb2N0bGAgaXMgc3BlY2lmaWNhbGx5IGZvciBwaWRmZC4gYHByb2NfdWlkX21hcF93cml0ZWAgaXMgZm9yIHVzZXIgbmFtZXNwYWNlLiBgaXNvdHBfc2VuZG1zZ2AgaXMgZm9yIENBTiBJU09UUC4gYHJlZ2lzdGVyX3ZsYW5fZGV2YCBpcyBmb3IgVkxBTiwgYW5kIGBleHQ0X3Jlc2l6ZV9mc2AgaXMgZm9yIHRoZSBleHQ0IHJlc2l6ZS4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEkgdGhpbmsgSSBuZWVkOiBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX1VTRVJfTlNgLCBgQ09ORklHX0NBTl9JU09UUGAsIGBDT05GSUdfTkVUX0FDVF9HQUNUYCwgYENPTkZJR19BSU9gLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC4KCk9oLCBJIGZvcmdvdC4gYENPTkZJR19DQU5fSVNPVFBgIGhhcyBhIHBhcmVudCBjb25maWc6IGBDT05GSUdfQ0FOYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9jYW4vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBTl9JU09UUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQ0FOX0lTT1RQIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ0FOX0lTT1RQYC4gTXkgZ28tdG8gaXMgdXN1YWxseSB0aGUgYEtjb25maWdgIGZpbGVzLCBzbyBsZXQmIzM5O3MgbmF2aWdhdGUgdG8gYG5ldC9jYW4vS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGBDQU5fSVNPVFBgIGlzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGl0IHJlbGllcyBvbi4gSSBleHBlY3QgSSYjMzk7bGwgZmluZCBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG9vLCBhbmQgcG9zc2libHkgc29tZSBgZGVmYXVsdGAgdmFsdWVzIG9yIGBoZWxwYCB0ZXh0IHRoYXQgZ2l2ZSBtZSBjb250ZXh0LiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgQ0FOX0lTT1RQYCBpcyBzZWxlY3RlZCwgYW5kIGNvbnZlcnNlbHksIHdoYXQgbWlnaHQgbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBJICpkb24mIzM5O3QqIHdhbnQgaXQuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSwgYW5kIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0lTT1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXCYjMzQ7bmV0L2Nhbi9qMTkzOS9LY29uZmlnXCYjMzQ7XG5uZXQvY2FuL0tjb25maWctNTgtXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxubmV0L2Nhbi9LY29uZmlnLTYwLVx0dHJpc3RhdGUgXCYjMzQ7SVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENBTl9JU09UUCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zIGFib3V0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpY3MgcmVsYXRlZCB0byBgY29uZmlnIENBTl9JU09UUGAuIFRoaXMgbGluZSBpcyBjcnVjaWFsLCBhbmQgaXQmIzM5O3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGUgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgY29uZmlndXJlZCwgd2hhdCBmb2xsb3dzIHRoaXMgbGluZSwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgYXJlYSBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgSVNPLVRQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBzbyBsb29raW5nIGRlZXBlciBhdCB3aGF0IGlzIGRlZmluZWQgaXMgZXNzZW50aWFsLiBJdCBjb3VsZCBpbnZvbHZlIHBhcmFtZXRlcnMgZm9yIGFkZHJlc3NpbmcsIGZsb3cgY29udHJvbCwgZnJhZ21lbnRhdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcuIFdpdGhvdXQgdGhhdCBjb250ZXh0LCBhbnkgYnJvYWRlciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBwcmVtYXR1cmUgYW5kIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGZvcm0gYSByZWxpYWJsZSBvcGluaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fSVNPVFAoLipcXG4pezEsNX0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUyNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIENBTiBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBDQU4gbmV0d29yayBjb25maWd1cmF0aW9uLiBUaGUgYG5ldC9jYW4vS2NvbmZpZ2AgZmlsZSBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgQ0FOIGZ1bmN0aW9uYWxpdGllcyBhcmUgZGVmaW5lZCwgYW5kIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHRoZSBvcHRpb25zIEkgbmVlZCB0byBleGFtaW5lLiBVc2luZyBgcmVhZC1maWxlYCBvbiB0aGF0IHNwZWNpZmljIEtjb25maWcgZmlsZSBpcyB0aGUgbW9zdCBlZmZpY2llbnQgZmlyc3Qgc3RlcCB0byBnZXQgYW4gb3ZlcnZpZXcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCBhcmUgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIG9mZmVyIG1lIGEgc3RyYWlnaHRmb3J3YXJkIG91dGxpbmUgb2YgdGhlIGhpZ2gtbGV2ZWwgQ0FOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGVzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFx0ICBieSB0aGUgbmV0bGluayBjb25maWd1cmF0aW9uIGludGVyZmFjZSBrbm93biBlLmcuIGZyb20gaXB0YWJsZXMuXG4gIDU2Olx0XG4gIDU3Olx0c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBDQU5fSVNPVFBcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgQ0FOIFRyYW5zcG9ydCBQcm90b2NvbHMgb2ZmZXIgc3VwcG9ydCBmb3Igc2VnbWVudGVkIFBvaW50LXRvLVBvaW50XG4gIDYzOlx0XHQgIGNvbW11bmljYXRpb24gYmV0d2VlbiBDQU4gbm9kZXMgdmlhIHR3byBkZWZpbmVkIENBTiBJZGVudGlmaWVycy5cbiAgNjQ6XHRcdCAgVGhpcyBwcm90b2NvbCBkcml2ZXIgaW1wbGVtZW50cyBzZWdtZW50ZWQgZGF0YSB0cmFuc2ZlcnMgZm9yIENBTiBDQ1xuICA2NTpcdFx0ICAoYWthIENsYXNzaWNhbCBDQU4sIENBTiAyLjBCKSBhbmQgQ0FOIEZEIGZyYW1lIHR5cGVzIHdoaWNoIHdlcmVcbiAgNjY6XHRcdCAgaW50cm9kdWNlZCB3aXRoIElTTyAxNTc2NS0yOjIwMTYuXG4gIDY3Olx0XHQgIEFzIENBTiBmcmFtZXMgY2FuIG9ubHkgdHJhbnNwb3J0IGEgc21hbGwgYW1vdW50IG9mIGRhdGEgYnl0ZXNcbiAgNjg6XHRcdCAgKG1heC4gOCBieXRlcyBmb3IgQ0FOIENDIGFuZCBtYXguIDY0IGJ5dGVzIGZvciBDQU4gRkQpIHRoaXNcbiAgNjk6XHRcdCAgc2VnbWVudGF0aW9uIGlzIG5lZWRlZCB0byB0cmFuc3BvcnQgbG9uZ2VyIFByb3RvY29sIERhdGEgVW5pdHMgKFBEVSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwMjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDQU5fSVNPVFAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDQU5fSVNPVFBgIGFuZCBJIHNlZSBpdCYjMzk7cyBuZXN0ZWQgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGhpbiB0aGUgYENBTmAgbWVudS4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhhdC4gTm93LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGBDQU5gIG1lbnUgaXRzZWxmIGlzIG5lY2Vzc2FyeS4gV2UgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGBDQU5gIGluZnJhc3RydWN0dXJlIGlzLCBpbiBmYWN0LCBuZWVkZWQgYmVmb3JlIGFzc3VtaW5nIGBDQU5fSVNPVFBgIGlzIHJlbGV2YW50LiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgY2xhcmlmeSBpdHMgcm9sZSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnLTUtXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGUgbmVlZCBmb3IgYENBTmAgY2xlYXJseS4gTm93LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBsZXQmIzM5O3MgdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9BQ1RfR0FDVGAuIFVuZGVyc3RhbmRpbmcgd2hhdCBgTkVUX0FDVF9HQUNUYCByZWxpZXMgdXBvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBsYW5kc2NhcGUgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMgZm9yIGBDQU5gLiBUaGlzIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgdW5mb3Jlc2VlbiBjb25mbGljdHMgb3IgcmVkdW5kYW50IGVmZm9ydHMgZG93biB0aGUgbGluZS4gSXTigJlzIGFib3V0IGJlaW5nIGVmZmljaWVudCBhbmQga25vd2luZyB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBtYWtpbmcgYW55IGFzc3VtcHRpb25zIG9yIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFxuIDcyNjpcdGNvbmZpZyBORVRfQUNUX0dBQ1RcbiA3Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgYWN0aW9uc1wmIzM0O1xuIDcyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDcyOTpcdFx0aGVscFxuIDczMDpcdFx0ICBTYXkgWSBoZXJlIHRvIHRha2UgZ2VuZXJpYyBhY3Rpb25zIHN1Y2ggYXMgZHJvcHBpbmcgYW5kXG4gNzMxOlx0XHQgIGFjY2VwdGluZyBwYWNrZXRzLlxuIDczMjpcdFxuIDczMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzM0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfZ2FjdC5cbiA3MzU6XHRcbiA3MzY6XHRjb25maWcgR0FDVF9QUk9CXG4gNzM3Olx0XHRib29sIFwmIzM0O1Byb2JhYmlsaXR5IHN1cHBvcnRcJiMzNDtcbiA3Mzg6XHRcdGRlcGVuZHMgb24gTkVUX0FDVF9HQUNUXG4gNzM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjUwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBORVRfQ0xTX0FDVGAgaXMgYSBrZXkgY29tcG9uZW50IGhlcmUsIG5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBJIGFsc28gc2VlIGBHQUNUX1BST0JgIGlzIG1vZGlmaWVkIGluIHRoZSBjb2RlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IGludm9sdmVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBwYXRjaCB0byBtYWtlIHN1cmUuCgpBaCwgeWVzLCBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0OgoKYGBgYwojaWZkZWYgQ09ORklHX0dBQ1RfUFJPQgpzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KQpgYGAKClRoZSBgI2lmZGVmIENPTkZJR19HQUNUX1BST0JgIGNvbmZpcm1zIG15IGluaXRpYWwgb2JzZXJ2YXRpb24uIGBHQUNUX1BST0JgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gTm93LCB0aW1lIHRvIG1vdmUgb24gYW5kIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZMQU5fODAyMVFgIGluIHJlbGF0aW9uIHRvIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBWTEFOXzgwMjFRXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgU2VsZWN0IHRoaXMgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY3JlYXRlIDgwMi4xUSBWTEFOIGludGVyZmFjZXNcbiAgMTA6XHRcdCAgb24geW91ciBFdGhlcm5ldCBpbnRlcmZhY2VzLiA4MDIuMVEgVkxBTiBzdXBwb3J0cyBhbG1vc3RcbiAgMTE6XHRcdCAgZXZlcnl0aGluZyBhIHJlZ3VsYXIgRXRoZXJuZXQgaW50ZXJmYWNlIGRvZXMsIGluY2x1ZGluZ1xuICAxMjpcdFx0ICBmaXJld2FsbGluZywgYnJpZGdpbmcsIGFuZCBvZiBjb3Vyc2UgSVAgdHJhZmZpYy4gWW91IHdpbGwgbmVlZFxuICAxMzpcdFx0ICB0aGUgJiMzOTtpcCYjMzk7IHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxuICAxNDpcdFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XG4gIDE1Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IENoZWNrOiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gSSBzZWUgbm8gaW1tZWRpYXRlbHkgb2J2aW91cywgZGlyZWN0IGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZS4gR29vZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyAqYSBiaXQqLCBidXQgd2Uga25vdyBiZXR0ZXIgdGhhbiB0byBhc3N1bWUgdG9vIG11Y2ggYXQgdGhpcyBzdGFnZS4KClRpbWUgdG8gZGVsdmUgYSBsaXR0bGUgZGVlcGVyIGFuZCBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBoaWRkZW4gaXNzdWVzLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEFJT2AuIEl0JiMzOTtzIGEga2V5IHBpZWNlLCBhbmQgaXRzIGludGVyYWN0aW9ucyBhcmUgb2Z0ZW4gd2hlcmUgdGhpbmdzIGJlY29tZSBzdWJ0bHkgaW50ZXJjb25uZWN0ZWQgb3IgY2F1c2UgaGVhZGFjaGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTE1Olx0XG4xOTE2Olx0Y29uZmlnIEFJT1xuMTkxNzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTE4Olx0XHRkZWZhdWx0IHlcbjE5MTk6XHRcdGhlbHBcbjE5MjA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXG4xOTIxOlx0XHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xuMTkyMjpcdFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cbjE5MjM6XHRcbjE5MjQ6XHRjb25maWcgSU9fVVJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUgLSBVU0VSX05TKioKClJpZ2h0LCBubyBpbW1lZGlhdGUsIG9idmlvdXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFyZSBzY3JlYW1pbmcgYXQgbWUuIFRoYXQmIzM5O3MgZ29vZCwgYSBjbGVhbiBzbGF0ZSB0byBiZWdpbiB3aXRoIGlzIGFsd2F5cyBwcmVmZXJhYmxlLiBCdXQgbGV0JiMzOTtzIG5vdCBnZXQgY29tcGxhY2VudC4gTXkgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgJiMzNDtubyBhcHBhcmVudCBkZXBlbmRlbmNpZXMmIzM0OyBvZnRlbiBtYXNrcyBzb21ldGhpbmcgc3VidGxlLCBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBvbmx5IHJlbGV2YW50IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGd1dHMgb2YgdGhlIHByb2JsZW0sIGlzIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiBvZiBhbnl0aGluZyByZWxhdGVkIHRvIGBVU0VSX05TYC4gSXTigJlzIGEgY29tbW9uIGFyZWEgZm9yIGhpZGRlbiBjb21wbGV4aXR5LCBlc3BlY2lhbGx5IGluIHN5c3RlbXMgaW52b2x2aW5nIGNvbnRhaW5lcml6YXRpb24sIHNlY3VyaXR5LCBvciBwcml2aWxlZ2Ugc2VwYXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSwgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgcmVnYXJkaW5nIHVzZXIgbmFtZXNwYWNlcywgYW5kIGhvdyB0aG9zZSBjb25maWd1cmF0aW9ucyBtaWdodCBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWxldmFudCBjb21wb25lbnQuIEkgbmVlZCB0byBpZGVudGlmeSBpZiBhbmQgaG93IHVzZXIgbmFtZXNwYWNlIG1hcHBpbmcgYWZmZWN0cyBwZXJtaXNzaW9ucywgcmVzb3VyY2UgbGltaXRzLCBvciBpbnRlcmFjdGlvbiB3aXRoIGtlcm5lbCBmZWF0dXJlcy4gSeKAmWxsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHJlbGF0ZSB0byB0aGlzIGNvbXBvbmVudCwgZm9jdXNpbmcgb24gdGhlIHNldHRpbmdzIGZvciBgVVNFUl9OU2AuIFRoZW4sIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhvc2Ugd2l0aCB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24gYW5kIGFueSByZWxhdGVkIHNlY3VyaXR5IGFkdmlzb3JpZXMgb3Iga25vd24gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGNhcmVmdWwgYW5hbHlzaXMgc2hvdWxkIHRlbGwgbWUgd2hldGhlciBhbnkgaXNzdWVzIGFyZSB3YWl0aW5nIHRvIG1hbmlmZXN0IHRoZW1zZWx2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDQ1Olx0XG4xNDQ2Olx0Y29uZmlnIFVTRVJfTlNcbjE0NDc6XHRcdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbjE0NDg6XHRcdGRlZmF1bHQgblxuMTQ0OTpcdFx0aGVscFxuMTQ1MDpcdFx0ICBUaGlzIGFsbG93cyBjb250YWluZXJzLCBpLmUuIHZzZXJ2ZXJzLCB0byB1c2UgdXNlciBuYW1lc3BhY2VzXG4xNDUxOlx0XHQgIHRvIHByb3ZpZGUgZGlmZmVyZW50IHVzZXIgaW5mbyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuXG4xNDUyOlx0XG4xNDUzOlx0XHQgIFdoZW4gdXNlciBuYW1lc3BhY2VzIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgaXQgaXNcbjE0NTQ6XHRcdCAgcmVjb21tZW5kZWQgdGhhdCB0aGUgTUVNQ0cgb3B0aW9uIGFsc28gYmUgZW5hYmxlZCBhbmQgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSDigJMgbm8gaW1tZWRpYXRlLCBleHBsaWNpdCBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIEdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIGF0IGxlYXN0IGluaXRpYWxseS4gTm93LCBnaXZlbiBteSBhcmVhIG9mIGV4cGVydGlzZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGBFWFQ0X0ZTYCBmZWF0dXJlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IG90aGVyIGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBjb21tb25seSB1c2VkIGFsb25nc2lkZSBFWFQ0LiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBzdG9yYWdlIHRlY2hub2xvZ3ksIGFuZCBJIG5lZWQgYSBwcmVjaXNlIHBpY3R1cmUgb2YgaXRzIHN1cnJvdW5kaW5nIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBkb24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBpbW1lZGlhdGUsIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiBlYWNoIG90aGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGZpdCB0b2dldGhlci4gU28sIG15IGN1cnJlbnQgbGlzdCBvZiBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlciBpczogYEVYVDRfRlNgLCBgVVNFUl9OU2AsIGBDQU5gLCBgQ0FOX0lTT1RQYCwgYE5FVF9DTFNfQUNUYCwgYE5FVF9BQ1RfR0FDVGAsIGBHQUNUX1BST0JgLCBgQUlPYCwgYW5kIGBWTEFOXzgwMjFRYC4gVGhleSBhbGwgc2VlbSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkLCBidXQgSSBrbm93IGJldHRlciB0aGFuIHRvIGFzc3VtZSBjb21wbGV0ZSBpbmRlcGVuZGVuY2UgYXQgdGhpcyBwb2ludC4KCkhvbGQgb24gYSBzZWNvbmQsIHNvbWV0aGluZyBqdXN0IHBpbmdlZCBteSByYWRhci4gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgYENPTkZJR19DQU5gLiBJIHJlY2FsbCB0aGF0IGBDQU5gIGlzIHR5cGljYWxseSBwcmVzZW50ZWQgYXMgYSBtZW51IGVudHJ5IGluIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCdXQgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpZiB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50ICYjMzQ7Q0FOJiMzNDsgaXMgYWxzbyBpdHNlbGYgYSBkaXN0aW5jdCBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMgbm93LCBhcyB0aGlzIGNvdWxkIGltcGFjdCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJvY2Vzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZy01LVxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cbm5ldC9jYW4vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZz0yMj1pZiBDQU5cbm5ldC9jYW4vS2NvbmZpZy0yMy1cbm5ldC9jYW4vS2NvbmZpZzoyNDpjb25maWcgQ0FOX1JBV1xubmV0L2Nhbi9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7UmF3IENBTiBQcm90b2NvbCAocmF3IGFjY2VzcyB3aXRoIENBTi1JRCBmaWx0ZXJpbmcpXCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnLTMzLVxubmV0L2Nhbi9LY29uZmlnOjM0OmNvbmZpZyBDQU5fQkNNXG5uZXQvY2FuL0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNhc3QgTWFuYWdlciBDQU4gUHJvdG9jb2wgKHdpdGggY29udGVudCBmaWx0ZXJpbmcpXCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnLTQ1LVxubmV0L2Nhbi9LY29uZmlnOjQ2OmNvbmZpZyBDQU5fR1dcbm5ldC9jYW4vS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O0NBTiBHYXRld2F5L1JvdXRlciAod2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24pXCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZy01OC1cbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXG5uZXQvY2FuL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDMwCgkJCQkJCQlvdXRwdXQ6IDI5NQoJCQkJCQkJdGhvdWdodHM6IDg3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVudWNvbmZpZyBDQU5gIGVudHJ5LiBUaGF0IG1lYW5zIGBDQU5gIGlzIHRoZSBjb25maWd1cmF0aW9uIG5hbWUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBmb2N1cyBzeW1ib2xzIEkgbmVlZCB0byBkZWZpbmUuIEkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBleHQ0X3Jlc2l6ZV9mc2AsIGBwaWRmZF9pb2N0bGAsIGBwcm9jX3VpZF9tYXBfd3JpdGVgLCBgaXNvdHBfc2VuZG1zZ2AsIGB0Y2ZfZ2FjdF9hY3RgLCBgc3lzX2lvX2dldGV2ZW50c2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBhbmQgYHZmc19nZXRfdHJlZWAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHN5c19pb19nZXRldmVudHNgLiBJIGtub3cgU3l6a2FsbGVyIHVzZXMgYGlvX2dldGV2ZW50c2AsIGJ1dCB0aGUga2VybmVsIHN5bWJvbCBpcyBgc3lzX2lvX2dldGV2ZW50c2AuIEFjdHVhbGx5LCBvbiB4ODYsIGl0IG1pZ2h0IGJlIGBfX3g2NF9zeXNfaW9fZ2V0ZXZlbnRzYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGBzeXNfaW9fZ2V0ZXZlbnRzYCBpcyB0aGUgbW9zdCBkaXJlY3QuIFNob3VsZCBJIHVzZSBgc3lzX2lvX2dldGV2ZW50c2Agb3IgYGFpb19yZWFkX2V2ZW50c19yaW5nYD8gIExldCYjMzk7cyBzdGljayB3aXRoIGBzeXNfaW9fZ2V0ZXZlbnRzYCAtIFN5emthbGxlciBjYW4gaGFuZGxlIHRoZSBtYXRjaCB0byB0aGUgc3lzY2FsbC4gQWN0dWFsbHksIEkgd2FzIG1vZGlmeWluZyBhIHN0YXRpYyBmdW5jdGlvbiBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgIGluIHRoZXJlIGFzIHdlbGwuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQ0FOYCwgYENBTl9JU09UUGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0dBQ1RgLCBgR0FDVF9QUk9CYCwgYEFJT2AsIGFuZCBgVkxBTl84MDIxUWAuIEFueXRoaW5nIGVsc2UgdG8gY29uc2lkZXI/CgpJJiMzOTttIGFsc28gbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHRvIGBmcy9maWxlLmNgIHdpdGhpbiBgZXhwYW5kX2ZkdGFibGVgLCBgZXhwYW5kX2ZpbGVzYCwgYW5kIGBmZF9pbnN0YWxsYCwgd2hpY2ggYXJlIGhlYXZpbHkgdXNlZCBpbiBgb3BlbmAsIGBzb2NrZXRgLCBhbmQgYHBpcGVgLiBJIGNvdWxkIGFkZCBhIGZvY3VzIHN5bWJvbCwgYnV0IHRoZXNlIGFyZSBzbyBmdW5kYW1lbnRhbCB0aGF0IHRoZXkmIzM5O3JlIGFsbW9zdCBhbHdheXMgaGl0IGFueXdheS4gSSBjb25zaWRlcmVkIGBhbGxvY19mZGAgb3IgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBidXQgSSYjMzk7bSBnb2luZyB0byBvbWl0IHRoZW0gc2luY2UgdGhleSYjMzk7cmUgc3VjaCBjb21tb24gZnVuY3Rpb25zLgoKVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGZzL3BpZGZzLmNgIGFyZSBhcm91bmQgYHBpZGZkX2luZm9gLCBzbyBgcGlkZmRfaW9jdGxgIGlzIGEgZ29vZCBmb2N1cy4KCmBmcy9zdXBlci5jYCBtb2RpZmljYXRpb25zIGludm9sdmUgYHN1cGVyX2NhY2hlX2NvdW50YCwgYW5kIGB2ZnNfZ2V0X3RyZWVgIGlzIHRoZSByaWdodCBmb2N1cy4KCkZvciBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgLCBJJiMzOTt2ZSBnb3QgYG1hcF9pZF9yYW5nZV9kb3duYCwgYG1hcF9pZF9yYW5nZV91cGAsIGBtX3N0YXJ0YCwgYW5kIGBtYXBfd3JpdGVgIGNoYW5nZXMuIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGNhcHR1cmVzIHRoZSByZWxldmFudCBwYXJ0LgoKVGhlIGBsaWIvdnNwcmludGYuY2AgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gYGZpbGxfcHRyX2tleWAgYW5kIGBfX3B0cl90b19oYXNodmFsYCAoZm9yIGAlcGAgZm9ybWF0dGluZykg4oCTIG5vdCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGEgZm9jdXMgc3ltYm9sLgoKYG5ldC84MDIxcS92bGFuLmNgIHVwZGF0ZXMgaW5jbHVkZSBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBzbyBgcmVnaXN0ZXJfdmxhbl9kZXZgIGlzIHRoZSBmb2N1cy4KCkluIGBuZXQvY2FuL2lzb3RwLmNgLCBgaXNvdHBfc2VuZG1zZ2AgaXMgcGVyZmVjdC4KCkxhc3RseSwgYG5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNgIGNoYW5nZXMgaW52b2x2ZSBgX19yZXVzZXBvcnRfYWRkX3NvY2tgLCBgX19yZXVzZXBvcnRfZGV0YWNoX3NvY2tgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYW5kIGByZXVzZXBvcnRfbWlncmF0ZV9zb2NrYC4gSSYjMzk7bGwgdXNlIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGFzIHRoZSByZXByZXNlbnRhdGl2ZS4KCmBuZXQvc2NoZWQvYWN0X2dhY3QuY2AgY29udGFpbnMgYGdhY3RfbmV0X3JhbmRgLCBgZ2FjdF9kZXRlcm1gLCBgdGNmX2dhY3RfaW5pdGAsIGFuZCBgdGNmX2dhY3RfYWN0YCwgc28gYHRjZl9nYWN0X2FjdGAgaXMgdGhlIGFwcHJvcHJpYXRlIGZvY3VzLgoKSSYjMzk7bSBmZWVsaW5nIGdvb2QgYWJvdXQgdGhlc2Ugc2VsZWN0aW9ucy4gSSB0aGluayB0aGlzIGNvdmVycyB0aGUgaW1wb3J0YW50IGFyZWFzLiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9HQUNUJiMzNDssCiAgICAmIzM0O0dBQ1RfUFJPQiYjMzQ7LAogICAgJiMzNDtBSU8mIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcmVzaXplX2ZzJiMzNDssCiAgICAmIzM0O3BpZGZkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Byb2NfdWlkX21hcF93cml0ZSYjMzQ7LAogICAgJiMzNDtpc290cF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjZl9nYWN0X2FjdCYjMzQ7LAogICAgJiMzNDtzeXNfaW9fZ2V0ZXZlbnRzJiMzNDssCiAgICAmIzM0O3JldXNlcG9ydF9zZWxlY3Rfc29jayYjMzQ7LAogICAgJiMzNDtyZWdpc3Rlcl92bGFuX2RldiYjMzQ7LAogICAgJiMzNDt2ZnNfZ2V0X3RyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbW9yeSBiYXJyaWVycyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoZnMsIG5ldCwga2VybmVsLCBsaWIpIGJ5IHJlcGxhY2luZyBwbGFpbiByZWFkcy93cml0ZXMgYW5kIHNtcF9ybWIvd21iIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBjb25jdXJyZW5jeSBzZW1hbnRpY3MsIGZpeGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW1wcm92aW5nIGNvcnJlY3RuZXNzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbG9naWMsIGluY2x1ZGluZyBleHQ0IHJlc2l6aW5nLCBBSU8gZXZlbnQgcmVhZGluZywgdXNlciBuYW1lc3BhY2UgSUQgbWFwcGluZywgQ0FOIElTT1RQIG1lc3NhZ2Ugc2VuZGluZywgYW5kIFNPX1JFVVNFUE9SVCBzb2NrZXQgc2VsZWN0aW9uLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FDVCYjMzQ7LAogICAgJiMzNDtHQUNUX1BST0ImIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtwaWRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcm9jX3VpZF9tYXBfd3JpdGUmIzM0OywKICAgICYjMzQ7aXNvdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAgICYjMzQ7c3lzX2lvX2dldGV2ZW50cyYjMzQ7LAogICAgJiMzNDtyZXVzZXBvcnRfc2VsZWN0X3NvY2smIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7dmZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1vcnkgYmFycmllcnMgYWNyb3NzIG11bHRpcGxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGZzLCBuZXQsIGtlcm5lbCwgbGliKSBieSByZXBsYWNpbmcgcGxhaW4gcmVhZHMvd3JpdGVzIGFuZCBzbXBfcm1iL3dtYiB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgY29uY3VycmVuY3kgc2VtYW50aWNzLCBmaXhpbmcgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGltcHJvdmluZyBjb3JyZWN0bmVzcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGxvZ2ljLCBpbmNsdWRpbmcgZXh0NCByZXNpemluZywgQUlPIGV2ZW50IHJlYWRpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIENBTiBJU09UUCBtZXNzYWdlIHNlbmRpbmcsIGFuZCBTT19SRVVTRVBPUlQgc29ja2V0IHNlbGVjdGlvbi4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpcyBhIHJlZmFjdG9yaW5nIHRoYXQgcmVwbGFjZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYigpYCBhbmQgYHNtcF93bWIoKWApIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoYHNtcF9sb2FkX2FjcXVpcmUoKWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCkgYWNyb3NzIHZhcmlvdXMgc3Vic3lzdGVtcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBmaWVsZHMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI4MDg3ZGEzZWE0NThhYmEwYjRlMWQxMjUyOWQwYmQ3YjQwNWVjNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDozNjozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmMKQEAgLTEyMDYsMTMgJiM0MzsxMjA2LDEyIEBAIHN0YXRpYyB2b2lkIGFpb19jb21wbGV0ZShzdHJ1Y3QgYWlvX2tpb2NiICppb2NiKQogCS8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlCiAJICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW4KIAkgKi8KLQlzbXBfd21iKCk7CS8qIG1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqLwotCi0JY3R4LSZndDt0YWlsID0gdGFpbDsKJiM0MzsJV1JJVEVfT05DRShjdHgtJmd0O3RhaWwsIHRhaWwpOwogCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JcmluZy0mZ3Q7dGFpbCA9IHRhaWw7CiYjNDM7CS8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3JpbmctJmd0O3RhaWwsIHRhaWwpOwogCWZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAogCWN0eC0mZ3Q7Y29tcGxldGVkX2V2ZW50cyYjNDM7JiM0Mzs7CkBAIC0xMjg4LDEzICYjNDM7MTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsCiAJLyogQWNjZXNzIHRvIC0mZ3Q7cmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LSZndDtyaW5nX2xvY2suICovCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JdGFpbCA9IHJpbmctJmd0O3RhaWw7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UmIzM5O3ZlIHJlYWQgdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyLCB0aGF0CiAJICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLgomIzQzOwkgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuCiAJICovCi0Jc21wX3JtYigpOwomIzQzOwl0YWlsID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3JpbmctJmd0O3RhaWwpOwogCiAJcHJfZGVidWcoJiMzNDtoJXUgdCV1IG0ldVxuJiMzNDssIGhlYWQsIHRhaWwsIGN0eC0mZ3Q7bnJfZXZlbnRzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCA3MjRhMjdlOGJlNjEzLi5kNzBiOWNiMDkxNTUzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzU0MiwxNiAmIzQzOzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpCiB9CiAKIC8qCi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlCi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpCi0gKiBpbiByZXNpemUuYwomIzQzOyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy4KICAqLwogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JZXh0NF9ncm91cF90CW5ncm91cHMgPSBFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQ7Ci0KLQlzbXBfcm1iKCk7Ci0JcmV0dXJuIG5ncm91cHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CXJldHVybiBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihzYiktJmd0O3NfZ3JvdXBzX2NvdW50KTsKIH0KIAogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTg5OSwxMCAmIzQzOzg5OSw4IEBAIHN0YXRpYyBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoCiAKIAkvKiBub24tZXh0ZW50IGZpbGVzIGFyZSBsaW1pdGVkIHRvIGxvdyBibG9ja3MvZ3JvdXBzICovCiAJaWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtJmd0O2FjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkKLQkJbmdyb3VwcyA9IEVYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzOwotCi0JLyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqLwotCXNtcF9ybWIoKTsKJiM0MzsJCS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CQluZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO0VYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzKTsKIAogCXJldHVybiBuZ3JvdXBzOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmMKaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9yZXNpemUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Jlc2l6ZS5jCkBAIC0xNDYyLDExICYjNDM7MTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqCiAJICogVGhlIHByZWNpc2UgcnVsZXMgd2UgdXNlIGFyZToKIAkgKgotCSAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsCi0JICogICBkZXBlbmRlbnQgZGF0YSBhbmQgYmVmb3JlIG1vZGlmeWluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICAgYWZ0ZXIgYWxsIGRlcGVuZGVudCBkYXRhIGhhcyBiZWVuIHVwZGF0ZWQKIAkgKgotCSAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3VwcwotCSAqICAgY291bnQgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KJiM0MzsJICogKiBSZWFkZXJzIG11c3QgdXNlIGFuIGFjcXVpcmUgbG9hZCB3aGVuIHJlYWRpbmcgdGhlIGdyb3VwcwomIzQzOwkgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KIAkgKgogCSAqIE5CLiBUaGVzZSBydWxlcyBjYW4gYmUgcmVsYXhlZCB3aGVuIGNoZWNraW5nIHRoZSBncm91cCBjb3VudAogCSAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrCkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0CiAJICogYWxsb2NhdGlvbi4KIAkgKi8KLQlzbXBfd21iKCk7CiAKIAkvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqLwotCXNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0Mzs9IGZsZXhfZ2QtJmd0O2NvdW50OwotCXNiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzID0gbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCi0JCQkoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICBzYmktJmd0O3NfZ3JvdXBzX2NvdW50ICYjNDM7IGZsZXhfZ2QtJmd0O2NvdW50KTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzLAomIzQzOwkJCSAgbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7CiAKIAkvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpcwogCSAqIGFjdGl2ZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZS5jCkBAIC0yNzMsOCAmIzQzOzI3Myw2IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZkdGFibGUoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucikKIAlyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtJmd0O2ZkdCwgbmV3X2ZkdCk7CiAJaWYgKGN1cl9mZHQgIT0gJmFtcDtmaWxlcy0mZ3Q7ZmR0YWIpCiAJCWNhbGxfcmN1KCZhbXA7Y3VyX2ZkdC0mZ3Q7cmN1LCBmcmVlX2ZkdGFibGVfcmN1KTsKLQkvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqLwotCXNtcF93bWIoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEzLDcgJiM0MzszMTEsOCBAQCBzdGF0aWMgaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCS8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi8KIAlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAllcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7Ci0JZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOwomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTsKIAogCXdha2VfdXBfYWxsKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV93YWl0KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC02ODUsMTMgJiM0Mzs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpCiAJCXJldHVybjsKIAogCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKLQlpZiAodW5saWtlbHkoZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcykpIHsKJiM0MzsJLyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CiAJCWZkX2luc3RhbGxfc2xvd3BhdGgoZmQsIGZpbGUpOwogCQlyZXR1cm47CiAJfQotCS8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqLwotCXNtcF9ybWIoKTsKIAlmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtJmd0O2ZkdCk7CiAJVkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LSZndDtmZFtmZF0pICE9IE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSwgZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuYwppbmRleCBhNmE2NDNmMTVkMDhhLi4yY2QwZmFiNzMxODBlIDEwMDY0NAotLS0gYS9mcy9waWRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmMKQEAgLTM5Myw4ICYjNDM7MzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAKIAlhdHRyID0gUkVBRF9PTkNFKHBpZC0mZ3Q7YXR0cik7CiAJaWYgKG1hc2sgJmFtcDsgUElERkRfSU5GT19FWElUKSB7Ci0JCWlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewogCQkJa2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7CiAjaWZkZWYgQ09ORklHX0NHUk9VUFMKIAkJCWtpbmZvLmNncm91cGlkID0gYXR0ci0mZ3Q7Y2dyb3VwaWQ7CkBAIC00MDUsOCAmIzQzOzQwNCw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCX0KIAogCWlmIChtYXNrICZhbXA7IFBJREZEX0lORk9fQ09SRURVTVApIHsKLQkJaWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKIAkJCWtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFOwogCQkJa2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItJmd0O2NvcmVkdW1wX21hc2s7CiAJCQlraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLSZndDtjb3JlZHVtcF9zaWduYWw7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li41ODYwZGFlYTZkNDA1IDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTI2NywxMiAmIzQzOzI2NywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIAkgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZwogCSAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXQKIAkgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVjawotCSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXMKLQkgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuCiYjNDM7CSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgYWNxdWlyZSBpcyBtYXRjaGVkCiYjNDM7CSAqIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gc3VwZXJfd2FrZSgpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuCiAJICovCi0JaWYgKCEoc2ItJmd0O3NfZmxhZ3MgJmFtcDsgU0JfQk9STikpCiYjNDM7CWlmICghKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzYi0mZ3Q7c19mbGFncykgJmFtcDsgU0JfQk9STikpCiAJCXJldHVybiAwOwotCXNtcF9ybWIoKTsKIAogCWlmIChzYi0mZ3Q7c19vcCAmYW1wOyZhbXA7IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyAmYW1wOyZhbXA7CiAJICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwppbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwpAQCAtMzE3LDkgJiM0MzszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjbwogCiBzdGF0aWMgdTMyIG1hcF9pZF9yYW5nZV9kb3duKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCXN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50OwotCXVuc2lnbmVkIGV4dGVudHMgPSBtYXAtJmd0O25yX2V4dGVudHM7Ci0Jc21wX3JtYigpOwogCiAJaWYgKGV4dGVudHMgJmx0Oz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykKIAkJZXh0ZW50ID0gbWFwX2lkX3JhbmdlX2Rvd25fYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC0zODMsOSAmIzQzOzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50CiAKIHUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfdXBfYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC02NzYsOSAmIzQzOzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsCiAJCSAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlsb2ZmX3QgcG9zID0gKnBwb3M7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAocG9zICZndDs9IGV4dGVudHMpCiAJCXJldHVybiBOVUxMOwpAQCAtOTY3LDkgJiM0Mzs5NjcsMTEgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCSAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdAogCSAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLgogCSAqCi0JICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGUKLQkgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBjcmF6eQotCSAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuCiYjNDM7CSAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50CiYjNDM7CSAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50CiYjNDM7CSAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2UKJiM0MzsJICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZgomIzQzOwkgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuCiAJICovCiAJbXV0ZXhfbG9jaygmYW1wO3VzZXJuc19zdGF0ZV9tdXRleCk7CiAKQEAgLTEwOTgsOCAmIzQzOzExMDAsOCBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCW1hcC0mZ3Q7Zm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDsKIAkJbWFwLSZndDtyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlOwogCX0KLQlzbXBfd21iKCk7Ci0JbWFwLSZndDtucl9leHRlbnRzID0gbmV3X21hcC5ucl9leHRlbnRzOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDttYXAtJmd0O25yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7CiAKIAkqcHBvcyA9IGNvdW50OwogCXJldCA9IGNvdW50OwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBlMjg1ZThiYzQ3MTJhLi5kNmYyMzVlMTQzYjcyIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdnNwcmludGYuYwpAQCAtNzYyLDkgJiM0Mzs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZAogewogCWdldF9yYW5kb21fYnl0ZXMoJmFtcDtwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpOwogCi0JLyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi8KLQlzbXBfd21iKCk7Ci0JV1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCkBAIC03ODEsMTIgJiM0Mzs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KQogewogCXVuc2lnbmVkIGxvbmcgaGFzaHZhbDsKIAotCWlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCi0Jc21wX3JtYigpOwotCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJaGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgJmFtcDtwdHJfa2V5KTsKIAkvKgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggMmQyZWZiODc3OTc1ZC4uZTM0YWRhMGNjZWFjZiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC03MCwxMCAmIzQzOzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJaWYgKGFycmF5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCS8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovCi0Jc21wX3dtYigpOwotCi0JdmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0gPSBhcnJheTsKJiM0MzsJLyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCBjNDFjYWFmOTQwOTVmLi42ZGI3MTcyYmRhYWNjIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTU2LDExICYjNDM7NTYsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTsKIAotCWFycmF5ID0gdmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF0KLQkJCQkgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTsKLQotCS8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovCi0Jc21wX3JtYigpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqLwomIzQzOwlhcnJheSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDt2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQomIzQzOwkJCQkgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSk7CiAKIAlyZXR1cm4gYXJyYXkgPyBhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0gOiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jCmluZGV4IDE1NTUzMGFlZGNlMmUuLjExYjY1M2JhN2MxMDkgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vaXNvdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2lzb3RwLmMKQEAgLTExNTYsOCAmIzQzOzExNTYsOCBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAlteV9nZW4gPSBpc290cF9pbmNfdHhfZ2VuKFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSk7CiAJaXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuLCBFQ09NTSk7IC8qIHByZXZlbnQgc3RhbGUgc2xvdCBtYXRjaGluZyAqLwogCVdSSVRFX09OQ0Uoc28tJmd0O3R4X2dlbiwgbXlfZ2VuKTsKLQlzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovCi0JV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NFTkRJTkcpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NFTkRJTkcpOwogCVdSSVRFX09OQ0Uoc28tJmd0O2NmZWNobywgMCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jCmluZGV4IDI5OTQ4Y2I0NGI3ZDEuLjZkM2M1MTFkMWRlZjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYwpAQCAtMTI1LDkgJiM0MzsxMjUsOCBAQCBzdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9hZGRfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJIHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpCiB7CiAJcmV1c2UtJmd0O3NvY2tzW3JldXNlLSZndDtudW1fc29ja3NdID0gc2s7Ci0JLyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqLwotCXNtcF93bWIoKTsKLQlyZXVzZS0mZ3Q7bnVtX3NvY2tzJiM0MzsmIzQzOzsKJiM0MzsJLyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3JldXNlLSZndDtudW1fc29ja3MsIHJldXNlLSZndDtudW1fc29ja3MgJiM0MzsgMSk7CiAJcmV1c2Vwb3J0X2dldF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTsKIH0KIApAQCAtMTQwLDcgJiM0MzsxMzksOCBAQCBzdGF0aWMgYm9vbCBfX3JldXNlcG9ydF9kZXRhY2hfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJCXJldHVybiBmYWxzZTsKIAogCXJldXNlLSZndDtzb2Nrc1tpXSA9IHJldXNlLSZndDtzb2Nrc1tyZXVzZS0mZ3Q7bnVtX3NvY2tzIC0gMV07Ci0JcmV1c2UtJmd0O251bV9zb2Nrcy0tOwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmV1c2UtJmd0O251bV9zb2NrcywgcmV1c2UtJmd0O251bV9zb2NrcyAtIDEpOwogCXJldXNlcG9ydF9wdXRfaW5jb21pbmdfY3B1KHNrLCByZXVzZSk7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTU4MywxMSAmIzQzOzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLAogCQlnb3RvIG91dDsKIAogCXByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtJmd0O3Byb2cpOwotCXNvY2tzID0gUkVBRF9PTkNFKHJldXNlLSZndDtudW1fc29ja3MpOwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KJiM0MzsJc29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmV1c2UtJmd0O251bV9zb2Nrcyk7CiAJaWYgKGxpa2VseShzb2NrcykpIHsKLQkJLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KLQkJc21wX3JtYigpOwotCiAJCWlmICghcHJvZyB8fCAhc2tiKQogCQkJZ290byBzZWxlY3RfYnlfaGFzaDsKIApAQCAtNjM0LDEzICYjNDM7NjMyLDExIEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfbWlncmF0ZV9zb2NrKHN0cnVjdCBzb2NrICpzaywKIAlpZiAoIXJldXNlKQogCQlnb3RvIG91dDsKIAotCXNvY2tzID0gUkVBRF9PTkNFKHJldXNlLSZndDtudW1fc29ja3MpOwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KJiM0MzsJc29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmV1c2UtJmd0O251bV9zb2Nrcyk7CiAJaWYgKHVubGlrZWx5KCFzb2NrcykpCiAJCWdvdG8gZmFpbHVyZTsKIAotCS8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovCi0Jc21wX3JtYigpOwotCiAJaGFzaCA9IG1pZ3JhdGluZ19zay0mZ3Q7c2tfaGFzaDsKIAlwcm9nID0gcmN1X2RlcmVmZXJlbmNlKHJldXNlLSZndDtwcm9nKTsKIAlpZiAoIXByb2cgfHwgcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1NLX1JFVVNFUE9SVF9TRUxFQ1RfT1JfTUlHUkFURSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwppbmRleCA1NjU4NjBjY2NiYTZkLi5kNGYzOWY5OGUyY2YwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wczsKICNpZmRlZiBDT05GSUdfR0FDVF9QUk9CCiBzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KQogewotCXNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi8KIAlpZiAoZ2V0X3JhbmRvbV91MzJfYmVsb3coZ2FjdC0mZ3Q7dGNmZ19wdmFsKSkKIAkJcmV0dXJuIGdhY3QtJmd0O3RjZl9hY3Rpb247CiAJcmV0dXJuIGdhY3QtJmd0O3RjZmdfcGFjdGlvbjsKQEAgLTM1LDcgJiM0MzszNCw2IEBAIHN0YXRpYyBpbnQgZ2FjdF9kZXRlcm0oc3RydWN0IHRjZl9nYWN0ICpnYWN0KQogewogCXUzMiBwYWNrID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtnYWN0LSZndDtwYWNrZXRzKTsKIAotCXNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi8KIAlpZiAocGFjayAlIGdhY3QtJmd0O3RjZmdfcHZhbCkKIAkJcmV0dXJuIGdhY3QtJmd0O3RjZl9hY3Rpb247CiAJcmV0dXJuIGdhY3QtJmd0O3RjZmdfcGFjdGlvbjsKQEAgLTEzMywxMSAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwKIAlpZiAocF9wYXJtKSB7CiAJCWdhY3QtJmd0O3RjZmdfcGFjdGlvbiA9IHBfcGFybS0mZ3Q7cGFjdGlvbjsKIAkJZ2FjdC0mZ3Q7dGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tJmd0O3B2YWwpOwotCQkvKiBNYWtlIHN1cmUgdGNmZ19wdmFsIGlzIHdyaXR0ZW4gYmVmb3JlIHRjZmdfcHR5cGUKLQkJICogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBnYWN0X25ldF9yYW5kKCkgJmFtcDsgZ2FjdF9kZXRlcm0oKQotCQkgKi8KLQkJc21wX3dtYigpOwotCQlnYWN0LSZndDt0Y2ZnX3B0eXBlICAgPSBwX3Bhcm0tJmd0O3B0eXBlOwomIzQzOwkJLyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGNmX2dhY3RfYWN0KCkuICovCiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2dhY3QtJmd0O3RjZmdfcHR5cGUsIHBfcGFybS0mZ3Q7cHR5cGUpOwogCX0KICNlbmRpZgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Z2FjdC0mZ3Q7dGNmX2xvY2spOwpAQCAtMTYwLDcgJiM0MzsxNTUsOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAKICNpZmRlZiBDT05GSUdfR0FDVF9QUk9CCiAJewotCXUzMiBwdHlwZSA9IFJFQURfT05DRShnYWN0LSZndDt0Y2ZnX3B0eXBlKTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHRjZl9nYWN0X2luaXQoKSAqLwomIzQzOwl1MzIgcHR5cGUgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7Z2FjdC0mZ3Q7dGNmZ19wdHlwZSk7CiAKIAlpZiAocHR5cGUpCiAJCWFjdGlvbiA9IGdhY3RfcmFuZFtwdHlwZV0oZ2FjdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODI3CgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDE1MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IEFjcXVpcmUvUmVsZWFzZSBNZW1vcnkgQmFycmllciBSZWZhY3RvcmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBpbnN0YW5jZXMgb2YgYHNtcF9ybWIoKWAvYHNtcF93bWIoKWAgd2l0aCB0aGUgbW9yZSBtb2Rlcm4gYHNtcF9sb2FkX2FjcXVpcmUoKWAvYHNtcF9zdG9yZV9yZWxlYXNlKClgIGFjcm9zcyB2YXJpb3VzIHN1YnN5c3RlbXMgbGlrZSBBSU8sIGV4dDQsIGZpbGUgc3lzdGVtcywgYW5kIG5ldHdvcmtpbmcuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBtZW1vcnkgYmFycmllciBtb2Rlcm5pemF0aW9uIGVmZm9ydCwgd2hpY2ggaXMgZ29vZCBob3VzZWtlZXBpbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZXNlIGNoYW5nZXMgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHdheXMgZm9yIHRoZSBrZXJuZWwgdG8gcmVhZCB1bmluaXRpYWxpemVkIGRhdGEuIEhvd2V2ZXIsIGFmdGVyIGEgcXVpY2sgc2NhbiwgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRoYXQgYW55IG5ldyB2YXJpYWJsZXMgb3Igc3RydWN0dXJlcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4gRnVydGhlcm1vcmUsIHdlIGFyZW4mIzM5O3QgY2hhbmdpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocywgbm9yIGlzIGFueXRoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4KCkRpZ2dpbmcgaW4gYSBsaXR0bGUgZGVlcGVyLCB0aGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVwbGFjZW1lbnRzIG9mIG1lbW9yeSBiYXJyaWVycyB3aXRoIGFjcXVpcmUvcmVsZWFzZSBvcGVyYXRpb25zLiBUaGVzZSBvcGVyYXRpb25zIGluaGVyZW50bHkgcHJvdmlkZSBtZW1vcnkgb3JkZXJpbmcgZ3VhcmFudGVlcywganVzdCBsaWtlIHRoZSBvbGQgYmFycmllcnMgZGlkLCBzbyBjb25jZXB0dWFsbHksIHdlJiMzOTtyZSBtYWtpbmcgdGhlIGNvZGUgc2FmZXIgb3IgYXQgbGVhc3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuCgpJIGRpZCBhIGxpbmUtYnktbGluZSBpbnNwZWN0aW9uIG9mIGFsbCB0aGUgY2hhbmdlcywgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGVzIGdpdmVuLgoKSW4gdGhlIGNhc2Ugb2YgYGZzL2Fpby5jYCwgZm9yIGV4YW1wbGUsIHRoZSBjb252ZXJzaW9uIGlzIGEgc3RhbmRhcmQgYHNtcF93bWIoKWAgYW5kIGFzc2lnbm1lbnQgdG8gYSBgc21wX3N0b3JlX3JlbGVhc2UoKWAsIHdoaWNoIGlzIHBlcmZlY3RseSBmaW5lLiBgZnMvZXh0NC9leHQ0LmhgIGlzIGFub3RoZXIgZXhhbXBsZSBvZiBzdGFuZGFyZCBjb252ZXJzaW9uLiBgZnMvZmlsZS5jYCwgYGZzL3BpZGZzLmNgLCBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgLCBgbGliL3ZzcHJpbnRmLmNgLCBgbmV0LzgwMjFxL3ZsYW4uY2AsIGBuZXQvY2FuL2lzb3RwLmNgLCBgbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY2AsIGFuZCBgbmV0L3NjaGVkL2FjdF9nYWN0LmNgIGFsc28gc2hvdyBzdGFuZGFyZCBjb252ZXJzaW9ucy4gTm90aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgaGVyZS4gTm8gbmV3LCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdmlzaWJsZS4KCkVzc2VudGlhbGx5LCBhbGwgdGhlIGNoYW5nZXMgYXJlIGp1c3QgcmVwbGFjaW5nIG1lbW9yeSBiYXJyaWVycyB3aXRoIGFjcXVpcmUvcmVsZWFzZS4gVGhlIG9sZCBiYXJyaWVycyBlbnN1cmVkIHRoZSByZWFkcyBhbmQgd3JpdGVzIHdlcmUgb3JkZXJlZCBhcyBpbnRlbmRlZCBhbmQgdGhlIG5ldyBpbnN0cnVjdGlvbnMgZG8gdGhlIHNhbWUgdGhpbmcuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlZmFjdG9yaW5nLCBhbmQgaW50cm9kdWNlIG5vdGhpbmcgbmV3LCBhIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQuIElmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaXNzdWVzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB0aGV5JiMzOTtkIGJlIGNhdWdodCBieSBLQ1NBTiBvciBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBjb2RlIHJldmlldy4gVGhpcyBpc24mIzM5O3QgYSBLTVNBTiBpc3N1ZSwgc28gTmVlZHNLTVNBTiBpcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpcyBhIHJlZmFjdG9yaW5nIHRoYXQgcmVwbGFjZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYigpYCBhbmQgYHNtcF93bWIoKWApIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoYHNtcF9sb2FkX2FjcXVpcmUoKWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCkgYWNyb3NzIHZhcmlvdXMgc3Vic3lzdGVtcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBmaWVsZHMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM3LjY4MTE1MzI0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTM4MTUzMDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpcyBhIHJlZmFjdG9yaW5nIHRoYXQgcmVwbGFjZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYigpYCBhbmQgYHNtcF93bWIoKWApIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoYHNtcF9sb2FkX2FjcXVpcmUoKWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCkgYWNyb3NzIHZhcmlvdXMgc3Vic3lzdGVtcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBmaWVsZHMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbW9yeSBiYXJyaWVycyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoZnMsIG5ldCwga2VybmVsLCBsaWIpIGJ5IHJlcGxhY2luZyBwbGFpbiByZWFkcy93cml0ZXMgYW5kIHNtcF9ybWIvd21iIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBjb25jdXJyZW5jeSBzZW1hbnRpY3MsIGZpeGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW1wcm92aW5nIGNvcnJlY3RuZXNzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbG9naWMsIGluY2x1ZGluZyBleHQ0IHJlc2l6aW5nLCBBSU8gZXZlbnQgcmVhZGluZywgdXNlciBuYW1lc3BhY2UgSUQgbWFwcGluZywgQ0FOIElTT1RQIG1lc3NhZ2Ugc2VuZGluZywgYW5kIFNPX1JFVVNFUE9SVCBzb2NrZXQgc2VsZWN0aW9uLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM3LjY4MTE1ODQ5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzIxNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjgwODdkYTNlYTQ1OGFiYTBiNGUxZDEyNTI5ZDBiZDdiNDA1ZWM0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDozNjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXFxuaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDRcXG4tLS0gYS9mcy9haW8uY1xcbisrKyBiL2ZzL2Fpby5jXFxuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXFxuIFxcdC8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlXFxuIFxcdCAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluXFxuIFxcdCAqL1xcbi1cXHRzbXBfd21iKCk7XFx0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXFxuLVxcbi1cXHRjdHgtXFx1MDAzZXRhaWwgPSB0YWlsO1xcbitcXHRXUklURV9PTkNFKGN0eC1cXHUwMDNldGFpbCwgdGFpbCk7XFxuIFxcbiBcXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXFx1MDAzZXJpbmdfZm9saW9zWzBdKTtcXG4gXFx0aGVhZCA9IHJpbmctXFx1MDAzZWhlYWQ7XFxuLVxcdHJpbmctXFx1MDAzZXRhaWwgPSB0YWlsO1xcbitcXHQvKiBNYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnJpbmctXFx1MDAzZXRhaWwsIHRhaWwpO1xcbiBcXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1swXSk7XFxuIFxcbiBcXHRjdHgtXFx1MDAzZWNvbXBsZXRlZF9ldmVudHMrKztcXG5AQCAtMTI4OCwxMyArMTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXFxuIFxcdC8qIEFjY2VzcyB0byAtXFx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cXHUwMDNlcmluZ19sb2NrLiAqL1xcbiBcXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXFx1MDAzZXJpbmdfZm9saW9zWzBdKTtcXG4gXFx0aGVhZCA9IHJpbmctXFx1MDAzZWhlYWQ7XFxuLVxcdHRhaWwgPSByaW5nLVxcdTAwM2V0YWlsO1xcbi1cXG4gXFx0LypcXG4gXFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSd2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxcbiBcXHQgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuXFxuK1xcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS5cXG4gXFx0ICovXFxuLVxcdHNtcF9ybWIoKTtcXG4rXFx0dGFpbCA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnJpbmctXFx1MDAzZXRhaWwpO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcImgldSB0JXUgbSV1XFxcXG5cXFwiLCBoZWFkLCB0YWlsLCBjdHgtXFx1MDAzZW5yX2V2ZW50cyk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWVcXG4tICogdGhlIGxvY2tpbmcgcHJvdG9jb2wgZG9jdW1lbnRlZCBpbiB0aGUgY29tbWVudHMgb2YgZXh0NF9ncm91cF9hZGQoKVxcbi0gKiBpbiByZXNpemUuY1xcbisgKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHVzZXMgYWNxdWlyZSBzZW1hbnRpY3MuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRleHQ0X2dyb3VwX3RcXHRuZ3JvdXBzID0gRVhUNF9TQihzYiktXFx1MDAzZXNfZ3JvdXBzX2NvdW50O1xcbi1cXG4tXFx0c21wX3JtYigpO1xcbi1cXHRyZXR1cm4gbmdyb3VwcztcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cXG4rXFx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZmxleF9ncm91cChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmNcXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXFxuKysrIGIvZnMvZXh0NC9tYmFsbG9jLmNcXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxcbiBcXG4gXFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xcbiBcXHRpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy1cXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxcbi1cXHRcXHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cXHUwMDNlYWNfc2IpLVxcdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHM7XFxuLVxcbi1cXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXFxuLVxcdHNtcF9ybWIoKTtcXG4rXFx0XFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cXG4rXFx0XFx0bmdyb3VwcyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNkVYVDRfU0IoYWMtXFx1MDAzZWFjX3NiKS1cXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzKTtcXG4gXFxuIFxcdHJldHVybiBuZ3JvdXBzO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXFxuaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jXFxuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xcbkBAIC0xNDYyLDExICsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdCAqXFxuIFxcdCAqIFRoZSBwcmVjaXNlIHJ1bGVzIHdlIHVzZSBhcmU6XFxuIFxcdCAqXFxuLVxcdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXFxuLVxcdCAqICAgZGVwZW5kZW50IGRhdGEgYW5kIGJlZm9yZSBtb2RpZnlpbmcgdGhlIGdyb3VwcyBjb3VudFxcbitcXHQgKiAqIFdyaXRlcnMgbXVzdCB1c2UgYSByZWxlYXNlIHN0b3JlIHdoZW4gdXBkYXRpbmcgdGhlIGdyb3VwcyBjb3VudFxcbitcXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXFxuIFxcdCAqXFxuLVxcdCAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3Vwc1xcbi1cXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXFxuK1xcdCAqICogUmVhZGVycyBtdXN0IHVzZSBhbiBhY3F1aXJlIGxvYWQgd2hlbiByZWFkaW5nIHRoZSBncm91cHNcXG4rXFx0ICogICBjb3VudCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXFxuIFxcdCAqXFxuIFxcdCAqIE5CLiBUaGVzZSBydWxlcyBjYW4gYmUgcmVsYXhlZCB3aGVuIGNoZWNraW5nIHRoZSBncm91cCBjb3VudFxcbiBcXHQgKiB3aGlsZSBmcmVlaW5nIGRhdGEsIGFzIHdlIGNhbiBvbmx5IGFsbG9jYXRlIGZyb20gYSBibG9ja1xcbkBAIC0xNDc0LDEyICsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdCAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0XFxuIFxcdCAqIGFsbG9jYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRzbXBfd21iKCk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqL1xcbi1cXHRzYmktXFx1MDAzZXNfZ3JvdXBzX2NvdW50ICs9IGZsZXhfZ2QtXFx1MDAzZWNvdW50O1xcbi1cXHRzYmktXFx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyA9IG1pbihzYmktXFx1MDAzZXNfZ3JvdXBzX2NvdW50LFxcbi1cXHRcXHRcXHQoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpO1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCxcXG4rXFx0XFx0XFx0ICBzYmktXFx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cXHUwMDNlY291bnQpO1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZzYmktXFx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyxcXG4rXFx0XFx0XFx0ICBtaW4oc2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCxcXG4rXFx0XFx0XFx0ICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpc1xcbiBcXHQgKiBhY3RpdmUuICovXFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuY1xcbmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0XFxuLS0tIGEvZnMvZmlsZS5jXFxuKysrIGIvZnMvZmlsZS5jXFxuQEAgLTI3Myw4ICsyNzMsNiBAQCBzdGF0aWMgaW50IGV4cGFuZF9mZHRhYmxlKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy1cXHUwMDNlZmR0LCBuZXdfZmR0KTtcXG4gXFx0aWYgKGN1cl9mZHQgIT0gXFx1MDAyNmZpbGVzLVxcdTAwM2VmZHRhYilcXG4gXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmN1cl9mZHQtXFx1MDAzZXJjdSwgZnJlZV9mZHRhYmxlX3JjdSk7XFxuLVxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovXFxuLVxcdHNtcF93bWIoKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMxMyw3ICszMTEsOCBAQCBzdGF0aWMgaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHQvKiBBbGwgZ29vZCwgc28gd2UgdHJ5ICovXFxuIFxcdGZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xcbiBcXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XFxuLVxcdGZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcXG4rXFx0LyogY291cGxlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBmZF9pbnN0YWxsKCkgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcXG4gXFxuIFxcdHdha2VfdXBfYWxsKFxcdTAwMjZmaWxlcy1cXHUwMDNlcmVzaXplX3dhaXQpO1xcbiBcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTY4NSwxMyArNjg0LDEyIEBAIHZvaWQgZmRfaW5zdGFsbCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrX3NjaGVkKCk7XFxuLVxcdGlmICh1bmxpa2VseShmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzKSkge1xcbitcXHQvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqL1xcbitcXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2ZmlsZXMtXFx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9ja19zY2hlZCgpO1xcbiBcXHRcXHRmZF9pbnN0YWxsX3Nsb3dwYXRoKGZkLCBmaWxlKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcdGZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy1cXHUwMDNlZmR0KTtcXG4gXFx0VkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LVxcdTAwM2VmZFtmZF0pICE9IE5VTEwpO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoZmR0LVxcdTAwM2VmZFtmZF0sIGZpbGUpO1xcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xcbmluZGV4IGE2YTY0M2YxNWQwOGEuLjJjZDBmYWI3MzE4MGUgMTAwNjQ0XFxuLS0tIGEvZnMvcGlkZnMuY1xcbisrKyBiL2ZzL3BpZGZzLmNcXG5AQCAtMzkzLDggKzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXG4gXFx0YXR0ciA9IFJFQURfT05DRShwaWQtXFx1MDAzZWF0dHIpO1xcbiBcXHRpZiAobWFzayBcXHUwMDI2IFBJREZEX0lORk9fRVhJVCkge1xcbi1cXHRcXHRpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfRVhJVCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG4tXFx0XFx0XFx0c21wX3JtYigpO1xcbitcXHRcXHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbiBcXHRcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcXG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXFxuIFxcdFxcdFxcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cXHUwMDNlY2dyb3VwaWQ7XFxuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG1hc2sgXFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XFxuLVxcdFxcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG4tXFx0XFx0XFx0c21wX3JtYigpO1xcbitcXHRcXHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG4gXFx0XFx0XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XFxuIFxcdFxcdFxcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVxcdTAwM2Vjb3JlZHVtcF9tYXNrO1xcbiBcXHRcXHRcXHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVxcdTAwM2Vjb3JlZHVtcF9zaWduYWw7XFxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXFxuaW5kZXggMDVlNDQzMTczMDM4Ny4uNTg2MGRhZWE2ZDQwNSAxMDA2NDRcXG4tLS0gYS9mcy9zdXBlci5jXFxuKysrIGIvZnMvc3VwZXIuY1xcbkBAIC0yNjcsMTIgKzI2NywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4gXFx0ICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmdcXG4gXFx0ICogZmlsZXN5c3RlbSBtaWdodCBiZSBpbiBhIHN0YXRlIG9mIHBhcnRpYWwgY29uc3RydWN0aW9uIGFuZCBoZW5jZSBpdFxcbiBcXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xcbi1cXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzXFxuLVxcdCAqIG1hdGNoZWQgd2l0aCB0aGUgb25lIGluIG1vdW50X2ZzKCkgYXMgd2UgZG9uJ3QgaG9sZCBsb2NrcyBoZXJlLlxcbitcXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIGFjcXVpcmUgaXMgbWF0Y2hlZFxcbitcXHQgKiB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHN1cGVyX3dha2UoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIShzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0JPUk4pKVxcbitcXHRpZiAoIShzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzYi1cXHUwMDNlc19mbGFncykgXFx1MDAyNiBTQl9CT1JOKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdGlmIChzYi1cXHUwMDNlc19vcCBcXHUwMDI2XFx1MDAyNiBzYi1cXHUwMDNlc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuaW5kZXggMGJlZDQ2MmU5YjJhMi4uNTc2YjY2N2E4ODEzNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuQEAgLTMxNyw5ICszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb1xcbiBcXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxuIHtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm1hcC1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuIFxcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xcbi1cXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVxcdTAwM2Vucl9leHRlbnRzO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAoZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiBcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcXG5AQCAtMzgzLDkgKzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50XFxuIFxcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcXG4ge1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXFxuK1xcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzKTtcXG4gXFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XFxuLVxcdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXFx1MDAzZW5yX2V4dGVudHM7XFxuLVxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdGlmIChleHRlbnRzIFxcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXFxuIFxcdFxcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcXG5AQCAtNjc2LDkgKzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcClcXG4ge1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXFxuK1xcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzKTtcXG4gXFx0bG9mZl90IHBvcyA9ICpwcG9zO1xcbi1cXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVxcdTAwM2Vucl9leHRlbnRzO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAocG9zIFxcdTAwM2U9IGV4dGVudHMpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0ICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0XFxuIFxcdCAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLlxcbiBcXHQgKlxcbi1cXHQgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZVxcbi1cXHQgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24ndCBoYXZlIGNyYXp5XFxuLVxcdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXFxuK1xcdCAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50XFxuK1xcdCAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50XFxuK1xcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcXG4rXFx0ICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZlxcbitcXHQgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuXFxuIFxcdCAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xcbiBcXG5AQCAtMTA5OCw4ICsxMTAwLDggQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRtYXAtXFx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XFxuIFxcdFxcdG1hcC1cXHUwMDNlcmV2ZXJzZSA9IG5ld19tYXAucmV2ZXJzZTtcXG4gXFx0fVxcbi1cXHRzbXBfd21iKCk7XFxuLVxcdG1hcC1cXHUwMDNlbnJfZXh0ZW50cyA9IG5ld19tYXAubnJfZXh0ZW50cztcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gbWFwX2lkX3JhbmdlX3t1cCxkb3dufSgpIGFuZCBtX3N0YXJ0KCkuICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZtYXAtXFx1MDAzZW5yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7XFxuIFxcbiBcXHQqcHBvcyA9IGNvdW50O1xcbiBcXHRyZXQgPSBjb3VudDtcXG5kaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuY1xcbmluZGV4IGUyODVlOGJjNDcxMmEuLmQ2ZjIzNWUxNDNiNzIgMTAwNjQ0XFxuLS0tIGEvbGliL3ZzcHJpbnRmLmNcXG4rKysgYi9saWIvdnNwcmludGYuY1xcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcXG4ge1xcbiBcXHRnZXRfcmFuZG9tX2J5dGVzKFxcdTAwMjZwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpO1xcbiBcXG4tXFx0LyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cXG4tXFx0c21wX3dtYigpO1xcbi1cXHRXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xcbiBcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIH1cXG4gXFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XFxuIFxcbi1cXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSkpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbi1cXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovXFxuLVxcdHNtcF9ybWIoKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4gXFx0aGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgXFx1MDAyNnB0cl9rZXkpO1xcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbmluZGV4IDJkMmVmYjg3Nzk3NWQuLmUzNGFkYTBjY2VhY2YgMTAwNjQ0XFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xcbisrKyBiL25ldC84MDIxcS92bGFuLmNcXG5AQCAtNzAsMTAgKzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIFxcdGlmIChhcnJheSA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbi1cXHQvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xcbi1cXHRzbXBfd21iKCk7XFxuLVxcbi1cXHR2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSA9IGFycmF5O1xcbitcXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXFxuaW5kZXggYzQxY2FhZjk0MDk1Zi4uNmRiNzE3MmJkYWFjYyAxMDA2NDRcXG4tLS0gYS9uZXQvODAyMXEvdmxhbi5oXFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxcbkBAIC01NiwxMSArNTYsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcXG4gXFxuLVxcdGFycmF5ID0gdmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4tXFx0XFx0XFx0XFx0ICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07XFxuLVxcbi1cXHQvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXFxuK1xcdGFycmF5ID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4rXFx0XFx0XFx0XFx0IFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pO1xcbiBcXG4gXFx0cmV0dXJuIGFycmF5ID8gYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dIDogTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcXG5pbmRleCAxNTU1MzBhZWRjZTJlLi4xMWI2NTNiYTdjMTA5IDEwMDY0NFxcbi0tLSBhL25ldC9jYW4vaXNvdHAuY1xcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xcbkBAIC0xMTU2LDggKzExNTYsOCBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0bXlfZ2VuID0gaXNvdHBfaW5jX3R4X2dlbihSRUFEX09OQ0Uoc28tXFx1MDAzZXR4X2dlbikpO1xcbiBcXHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovXFxuIFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcXG4tXFx0c21wX3dtYigpOyAvKiBzZWUgc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xcbi1cXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcXG4gXFx0V1JJVEVfT05DRShzby1cXHUwMDNlY2ZlY2hvLCAwKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXFxuaW5kZXggMjk5NDhjYjQ0YjdkMS4uNmQzYzUxMWQxZGVmOSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXFxuKysrIGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xcbkBAIC0xMjUsOSArMTI1LDggQEAgc3RhdGljIHZvaWQgX19yZXVzZXBvcnRfYWRkX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSlcXG4ge1xcbiBcXHRyZXVzZS1cXHUwMDNlc29ja3NbcmV1c2UtXFx1MDAzZW51bV9zb2Nrc10gPSBzaztcXG4tXFx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xcbi1cXHRzbXBfd21iKCk7XFxuLVxcdHJldXNlLVxcdTAwM2VudW1fc29ja3MrKztcXG4rXFx0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2cmV1c2UtXFx1MDAzZW51bV9zb2NrcywgcmV1c2UtXFx1MDAzZW51bV9zb2NrcyArIDEpO1xcbiBcXHRyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpO1xcbiB9XFxuIFxcbkBAIC0xNDAsNyArMTM5LDggQEAgc3RhdGljIGJvb2wgX19yZXVzZXBvcnRfZGV0YWNoX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRyZXVzZS1cXHUwMDNlc29ja3NbaV0gPSByZXVzZS1cXHUwMDNlc29ja3NbcmV1c2UtXFx1MDAzZW51bV9zb2NrcyAtIDFdO1xcbi1cXHRyZXVzZS1cXHUwMDNlbnVtX3NvY2tzLS07XFxuK1xcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnJldXNlLVxcdTAwM2VudW1fc29ja3MsIHJldXNlLVxcdTAwM2VudW1fc29ja3MgLSAxKTtcXG4gXFx0cmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01ODMsMTEgKzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXFx1MDAzZXByb2cpO1xcbi1cXHRzb2NrcyA9IFJFQURfT05DRShyZXVzZS1cXHUwMDNlbnVtX3NvY2tzKTtcXG4rXFx0LyogcGFpcmVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXFxuK1xcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2cmV1c2UtXFx1MDAzZW51bV9zb2Nrcyk7XFxuIFxcdGlmIChsaWtlbHkoc29ja3MpKSB7XFxuLVxcdFxcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXFxuLVxcdFxcdHNtcF9ybWIoKTtcXG4tXFxuIFxcdFxcdGlmICghcHJvZyB8fCAhc2tiKVxcbiBcXHRcXHRcXHRnb3RvIHNlbGVjdF9ieV9oYXNoO1xcbiBcXG5AQCAtNjM0LDEzICs2MzIsMTEgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9taWdyYXRlX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpZiAoIXJldXNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVxcdTAwM2VudW1fc29ja3MpO1xcbitcXHQvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cXG4rXFx0c29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZyZXVzZS1cXHUwMDNlbnVtX3NvY2tzKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFzb2NrcykpXFxuIFxcdFxcdGdvdG8gZmFpbHVyZTtcXG4gXFxuLVxcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXFxuLVxcdHNtcF9ybWIoKTtcXG4tXFxuIFxcdGhhc2ggPSBtaWdyYXRpbmdfc2stXFx1MDAzZXNrX2hhc2g7XFxuIFxcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXFx1MDAzZXByb2cpO1xcbiBcXHRpZiAoIXByb2cgfHwgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1NLX1JFVVNFUE9SVF9TRUxFQ1RfT1JfTUlHUkFURSkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhY3QuYyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jXFxuaW5kZXggNTY1ODYwY2NjYmE2ZC4uZDRmMzlmOThlMmNmMCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jXFxuQEAgLTI1LDcgKzI1LDYgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcztcXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcXG4gc3RhdGljIGludCBnYWN0X25ldF9yYW5kKHN0cnVjdCB0Y2ZfZ2FjdCAqZ2FjdClcXG4ge1xcbi1cXHRzbXBfcm1iKCk7IC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGNmX2dhY3RfaW5pdCgpICovXFxuIFxcdGlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LVxcdTAwM2V0Y2ZnX3B2YWwpKVxcbiBcXHRcXHRyZXR1cm4gZ2FjdC1cXHUwMDNldGNmX2FjdGlvbjtcXG4gXFx0cmV0dXJuIGdhY3QtXFx1MDAzZXRjZmdfcGFjdGlvbjtcXG5AQCAtMzUsNyArMzQsNiBAQCBzdGF0aWMgaW50IGdhY3RfZGV0ZXJtKHN0cnVjdCB0Y2ZfZ2FjdCAqZ2FjdClcXG4ge1xcbiBcXHR1MzIgcGFjayA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZnYWN0LVxcdTAwM2VwYWNrZXRzKTtcXG4gXFxuLVxcdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cXG4gXFx0aWYgKHBhY2sgJSBnYWN0LVxcdTAwM2V0Y2ZnX3B2YWwpXFxuIFxcdFxcdHJldHVybiBnYWN0LVxcdTAwM2V0Y2ZfYWN0aW9uO1xcbiBcXHRyZXR1cm4gZ2FjdC1cXHUwMDNldGNmZ19wYWN0aW9uO1xcbkBAIC0xMzMsMTEgKzEzMSw4IEBAIHN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4gXFx0aWYgKHBfcGFybSkge1xcbiBcXHRcXHRnYWN0LVxcdTAwM2V0Y2ZnX3BhY3Rpb24gPSBwX3Bhcm0tXFx1MDAzZXBhY3Rpb247XFxuIFxcdFxcdGdhY3QtXFx1MDAzZXRjZmdfcHZhbCAgICA9IG1heF90KHUxNiwgMSwgcF9wYXJtLVxcdTAwM2VwdmFsKTtcXG4tXFx0XFx0LyogTWFrZSBzdXJlIHRjZmdfcHZhbCBpcyB3cml0dGVuIGJlZm9yZSB0Y2ZnX3B0eXBlXFxuLVxcdFxcdCAqIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZ2FjdF9uZXRfcmFuZCgpIFxcdTAwMjYgZ2FjdF9kZXRlcm0oKVxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c21wX3dtYigpO1xcbi1cXHRcXHRnYWN0LVxcdTAwM2V0Y2ZnX3B0eXBlICAgPSBwX3Bhcm0tXFx1MDAzZXB0eXBlO1xcbitcXHRcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZmdfcHR5cGUsIHBfcGFybS1cXHUwMDNlcHR5cGUpO1xcbiBcXHR9XFxuICNlbmRpZlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbkBAIC0xNjAsNyArMTU1LDggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYWN0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcXG4gXFx0e1xcbi1cXHR1MzIgcHR5cGUgPSBSRUFEX09OQ0UoZ2FjdC1cXHUwMDNldGNmZ19wdHlwZSk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cXG4rXFx0dTMyIHB0eXBlID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Z2FjdC1cXHUwMDNldGNmZ19wdHlwZSk7XFxuIFxcbiBcXHRpZiAocHR5cGUpXFxuIFxcdFxcdGFjdGlvbiA9IGdhY3RfcmFuZFtwdHlwZV0oZ2FjdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM4LjE2OTE0NTc3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3MjM0NDg1MjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIGFjcm9zcyBtdWx0aXBsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIChmcywgbmV0LCBrZXJuZWwsIGxpYikgYnkgcmVwbGFjaW5nIHBsYWluIHJlYWRzL3dyaXRlcyBhbmQgc21wX3JtYi93bWIgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIGNvbmN1cnJlbmN5IHNlbWFudGljcywgZml4aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbXByb3ZpbmcgY29ycmVjdG5lc3MuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBsb2dpYywgaW5jbHVkaW5nIGV4dDQgcmVzaXppbmcsIEFJTyBldmVudCByZWFkaW5nLCB1c2VyIG5hbWVzcGFjZSBJRCBtYXBwaW5nLCBDQU4gSVNPVFAgbWVzc2FnZSBzZW5kaW5nLCBhbmQgU09fUkVVU0VQT1JUIHNvY2tldCBzZWxlY3Rpb24uIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjgwODdkYTNlYTQ1OGFiYTBiNGUxZDEyNTI5ZDBiZDdiNDA1ZWM0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjM2OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4tXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4rXHRXUklURV9PTkNFKGN0eC1cdTAwM2V0YWlsLCB0YWlsKTtcbiBcbiBcdHJpbmcgPSBmb2xpb19hZGRyZXNzKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXHRoZWFkID0gcmluZy1cdTAwM2VoZWFkO1xuLVx0cmluZy1cdTAwM2V0YWlsID0gdGFpbDtcbitcdC8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmluZy1cdTAwM2V0YWlsLCB0YWlsKTtcbiBcdGZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFxuIFx0Y3R4LVx1MDAzZWNvbXBsZXRlZF9ldmVudHMrKztcbkBAIC0xMjg4LDEzICsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCxcbiBcdC8qIEFjY2VzcyB0byAtXHUwMDNlcmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LVx1MDAzZXJpbmdfbG9jay4gKi9cbiBcdHJpbmcgPSBmb2xpb19hZGRyZXNzKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXHRoZWFkID0gcmluZy1cdTAwM2VoZWFkO1xuLVx0dGFpbCA9IHJpbmctXHUwMDNldGFpbDtcbi1cbiBcdC8qXG4gXHQgKiBFbnN1cmUgdGhhdCBvbmNlIHdlJ3ZlIHJlYWQgdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyLCB0aGF0XG4gXHQgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuXG4rXHQgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuXG4gXHQgKi9cbi1cdHNtcF9ybWIoKTtcbitcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJpbmctXHUwMDNldGFpbCk7XG4gXG4gXHRwcl9kZWJ1ZyhcImgldSB0JXUgbSV1XFxuXCIsIGhlYWQsIHRhaWwsIGN0eC1cdTAwM2Vucl9ldmVudHMpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0zNTQyLDE2ICszNTQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lzaXplX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBsb2ZmX3QgaV9zaXplKVxuIH1cbiBcbiAvKlxuLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWVcbi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpXG4tICogaW4gcmVzaXplLmNcbisgKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHVzZXMgYWNxdWlyZSBzZW1hbnRpY3MuXG4gICovXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0ZXh0NF9ncm91cF90XHRuZ3JvdXBzID0gRVhUNF9TQihzYiktXHUwMDNlc19ncm91cHNfY291bnQ7XG4tXG4tXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4gbmdyb3VwcztcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXG4rXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZmxleF9ncm91cChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4rKysgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTg5OSwxMCArODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudChcbiBcbiBcdC8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi9cbiBcdGlmICghKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGFjLVx1MDAzZWFjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSlcbi1cdFx0bmdyb3VwcyA9IEVYVDRfU0IoYWMtXHUwMDNlYWNfc2IpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3Vwcztcbi1cbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbi1cdHNtcF9ybWIoKTtcbitcdFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdFx0bmdyb3VwcyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2RVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzKTtcbiBcbiBcdHJldHVybiBuZ3JvdXBzO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuY1xuaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvcmVzaXplLmNcbisrKyBiL2ZzL2V4dDQvcmVzaXplLmNcbkBAIC0xNDYyLDExICsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKlxuIFx0ICogVGhlIHByZWNpc2UgcnVsZXMgd2UgdXNlIGFyZTpcbiBcdCAqXG4tXHQgKiAqIFdyaXRlcnMgbXVzdCBwZXJmb3JtIGEgc21wX3dtYigpIGFmdGVyIHVwZGF0aW5nIGFsbFxuLVx0ICogICBkZXBlbmRlbnQgZGF0YSBhbmQgYmVmb3JlIG1vZGlmeWluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAqIFdyaXRlcnMgbXVzdCB1c2UgYSByZWxlYXNlIHN0b3JlIHdoZW4gdXBkYXRpbmcgdGhlIGdyb3VwcyBjb3VudFxuK1x0ICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZFxuIFx0ICpcbi1cdCAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3Vwc1xuLVx0ICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxuK1x0ICogKiBSZWFkZXJzIG11c3QgdXNlIGFuIGFjcXVpcmUgbG9hZCB3aGVuIHJlYWRpbmcgdGhlIGdyb3Vwc1xuK1x0ICogICBjb3VudCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4gXHQgKlxuIFx0ICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50XG4gXHQgKiB3aGlsZSBmcmVlaW5nIGRhdGEsIGFzIHdlIGNhbiBvbmx5IGFsbG9jYXRlIGZyb20gYSBibG9ja1xuQEAgLTE0NzQsMTIgKzE0NzQsMTUgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0XG4gXHQgKiBhbGxvY2F0aW9uLlxuIFx0ICovXG4tXHRzbXBfd21iKCk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqL1xuLVx0c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICs9IGZsZXhfZ2QtXHUwMDNlY291bnQ7XG4tXHRzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzID0gbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbi1cdFx0XHQoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KCkgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgIHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCArIGZsZXhfZ2QtXHUwMDNlY291bnQpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyxcbitcdFx0XHQgIG1pbihzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4rXHRcdFx0ICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpc1xuIFx0ICogYWN0aXZlLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuY1xuaW5kZXggNjI4Y2EwN2RjNGIxNy4uODZjMDM1ZDQ1OWYyYSAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGUuY1xuKysrIGIvZnMvZmlsZS5jXG5AQCAtMjczLDggKzI3Myw2IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZkdGFibGUoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy1cdTAwM2VmZHQsIG5ld19mZHQpO1xuIFx0aWYgKGN1cl9mZHQgIT0gXHUwMDI2ZmlsZXMtXHUwMDNlZmR0YWIpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNmN1cl9mZHQtXHUwMDNlcmN1LCBmcmVlX2ZkdGFibGVfcmN1KTtcbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovXG4tXHRzbXBfd21iKCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzEzLDcgKzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXG4gXHQvKiBBbGwgZ29vZCwgc28gd2UgdHJ5ICovXG4gXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xuIFx0ZXJyb3IgPSBleHBhbmRfZmR0YWJsZShmaWxlcywgbnIpO1xuLVx0ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7XG4rXHQvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzLCBmYWxzZSk7XG4gXG4gXHR3YWtlX3VwX2FsbChcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfd2FpdCk7XG4gXHRyZXR1cm4gZXJyb3I7XG5AQCAtNjg1LDEzICs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJjdV9yZWFkX2xvY2tfc2NoZWQoKTtcbi1cdGlmICh1bmxpa2VseShmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSB7XG4rXHQvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqL1xuK1x0aWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzKSkpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7XG4gXHRcdGZkX2luc3RhbGxfc2xvd3BhdGgoZmQsIGZpbGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIGV4cGFuZF9mZHRhYmxlKCkgKi9cbi1cdHNtcF9ybWIoKTtcbiBcdGZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy1cdTAwM2VmZHQpO1xuIFx0VkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LVx1MDAzZWZkW2ZkXSkgIT0gTlVMTCk7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZmR0LVx1MDAzZWZkW2ZkXSwgZmlsZSk7XG5kaWZmIC0tZ2l0IGEvZnMvcGlkZnMuYyBiL2ZzL3BpZGZzLmNcbmluZGV4IGE2YTY0M2YxNWQwOGEuLjJjZDBmYWI3MzE4MGUgMTAwNjQ0XG4tLS0gYS9mcy9waWRmcy5jXG4rKysgYi9mcy9waWRmcy5jXG5AQCAtMzkzLDggKzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFxuIFx0YXR0ciA9IFJFQURfT05DRShwaWQtXHUwMDNlYXR0cik7XG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbi1cdFx0XHRzbXBfcm1iKCk7XG4rXHRcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xuICNpZmRlZiBDT05GSUdfQ0dST1VQU1xuIFx0XHRcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cdTAwM2VjZ3JvdXBpZDtcbkBAIC00MDUsOCArNDA0LDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHR9XG4gXG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19DT1JFRFVNUCkge1xuLVx0XHRpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFO1xuIFx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cdTAwM2Vjb3JlZHVtcF9zaWduYWw7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjU4NjBkYWVhNmQ0MDUgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMjY3LDEyICsyNjcsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHQgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZ1xuIFx0ICogZmlsZXN5c3RlbSBtaWdodCBiZSBpbiBhIHN0YXRlIG9mIHBhcnRpYWwgY29uc3RydWN0aW9uIGFuZCBoZW5jZSBpdFxuIFx0ICogaXMgZGFuZ2Vyb3VzIHRvIGFjY2VzcyBpdC4gIHN1cGVyX3RyeWxvY2tfc2hhcmVkKCkgdXNlcyBhIFNCX0JPUk4gY2hlY2tcbi1cdCAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXNcbi1cdCAqIG1hdGNoZWQgd2l0aCB0aGUgb25lIGluIG1vdW50X2ZzKCkgYXMgd2UgZG9uJ3QgaG9sZCBsb2NrcyBoZXJlLlxuK1x0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBhY3F1aXJlIGlzIG1hdGNoZWRcbitcdCAqIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gc3VwZXJfd2FrZSgpIGFzIHdlIGRvbid0IGhvbGQgbG9ja3MgaGVyZS5cbiBcdCAqL1xuLVx0aWYgKCEoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQk9STikpXG4rXHRpZiAoIShzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpIFx1MDAyNiBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgKzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSArMzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbid0IGhhdmUgY3Jhenlcbi1cdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXG4rXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuK1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbitcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcbitcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbitcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0bWFwLVx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XG4gXHRcdG1hcC1cdTAwM2VyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlO1xuIFx0fVxuLVx0c21wX3dtYigpO1xuLVx0bWFwLVx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IGUyODVlOGJjNDcxMmEuLmQ2ZjIzNWUxNDNiNzIgMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuKysrIGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcbiB7XG4gXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnB0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3dtYigpO1xuLVx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XG4gXG4tXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xuaW5kZXggMmQyZWZiODc3OTc1ZC4uZTM0YWRhMGNjZWFjZiAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmNcbisrKyBiL25ldC84MDIxcS92bGFuLmNcbkBAIC03MCwxMCArNzAsOCBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiBcdGlmIChhcnJheSA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4tXHQvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuLVx0c21wX3dtYigpO1xuLVxuLVx0dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSA9IGFycmF5O1xuK1x0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzQxY2FhZjk0MDk1Zi4uNmRiNzE3MmJkYWFjYyAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmhcbisrKyBiL25ldC84MDIxcS92bGFuLmhcbkBAIC01NiwxMSArNTYsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcbiBcbi1cdGFycmF5ID0gdmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxuLVx0XHRcdFx0ICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07XG4tXG4tXHQvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cbitcdGFycmF5ID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4rXHRcdFx0XHQgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSk7XG4gXG4gXHRyZXR1cm4gYXJyYXkgPyBhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0gOiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjExYjY1M2JhN2MxMDkgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTExNTYsOCArMTE1Niw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0bXlfZ2VuID0gaXNvdHBfaW5jX3R4X2dlbihSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSk7XG4gXHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovXG4gXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcbi1cdHNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi9cbi1cdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1NFTkRJTkcpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4gXHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jIGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuaW5kZXggMjk5NDhjYjQ0YjdkMS4uNmQzYzUxMWQxZGVmOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNcbisrKyBiL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNcbkBAIC0xMjUsOSArMTI1LDggQEAgc3RhdGljIHZvaWQgX19yZXVzZXBvcnRfYWRkX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG4ge1xuIFx0cmV1c2UtXHUwMDNlc29ja3NbcmV1c2UtXHUwMDNlbnVtX3NvY2tzXSA9IHNrO1xuLVx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xuLVx0c21wX3dtYigpO1xuLVx0cmV1c2UtXHUwMDNlbnVtX3NvY2tzKys7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MsIHJldXNlLVx1MDAzZW51bV9zb2NrcyArIDEpO1xuIFx0cmV1c2Vwb3J0X2dldF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcbiB9XG4gXG5AQCAtMTQwLDcgKzEzOSw4IEBAIHN0YXRpYyBib29sIF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cmV1c2UtXHUwMDNlc29ja3NbaV0gPSByZXVzZS1cdTAwM2Vzb2Nrc1tyZXVzZS1cdTAwM2VudW1fc29ja3MgLSAxXTtcbi1cdHJldXNlLVx1MDAzZW51bV9zb2Nrcy0tO1xuK1x0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmV1c2UtXHUwMDNlbnVtX3NvY2tzLCByZXVzZS1cdTAwM2VudW1fc29ja3MgLSAxKTtcbiBcdHJldXNlcG9ydF9wdXRfaW5jb21pbmdfY3B1KHNrLCByZXVzZSk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01ODMsMTEgKzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4tXHRzb2NrcyA9IFJFQURfT05DRShyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuK1x0LyogcGFpcmVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4rXHRzb2NrcyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2cmV1c2UtXHUwMDNlbnVtX3NvY2tzKTtcbiBcdGlmIChsaWtlbHkoc29ja3MpKSB7XG4tXHRcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4tXHRcdHNtcF9ybWIoKTtcbi1cbiBcdFx0aWYgKCFwcm9nIHx8ICFza2IpXG4gXHRcdFx0Z290byBzZWxlY3RfYnlfaGFzaDtcbiBcbkBAIC02MzQsMTMgKzYzMiwxMSBAQCBzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X21pZ3JhdGVfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAoIXJldXNlKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbitcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuIFx0aWYgKHVubGlrZWx5KCFzb2NrcykpXG4gXHRcdGdvdG8gZmFpbHVyZTtcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4tXHRzbXBfcm1iKCk7XG4tXG4gXHRoYXNoID0gbWlncmF0aW5nX3NrLVx1MDAzZXNrX2hhc2g7XG4gXHRwcm9nID0gcmN1X2RlcmVmZXJlbmNlKHJldXNlLVx1MDAzZXByb2cpO1xuIFx0aWYgKCFwcm9nIHx8IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1NLX1JFVVNFUE9SVF9TRUxFQ1RfT1JfTUlHUkFURSkge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmNcbmluZGV4IDU2NTg2MGNjY2JhNmQuLmQ0ZjM5Zjk4ZTJjZjAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmNcbkBAIC0yNSw3ICsyNSw2IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2FjdF9vcHM7XG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KVxuIHtcbi1cdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiBcdGlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LVx1MDAzZXRjZmdfcHZhbCkpXG4gXHRcdHJldHVybiBnYWN0LVx1MDAzZXRjZl9hY3Rpb247XG4gXHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZnX3BhY3Rpb247XG5AQCAtMzUsNyArMzQsNiBAQCBzdGF0aWMgaW50IGdhY3RfZGV0ZXJtKHN0cnVjdCB0Y2ZfZ2FjdCAqZ2FjdClcbiB7XG4gXHR1MzIgcGFjayA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmdhY3QtXHUwMDNlcGFja2V0cyk7XG4gXG4tXHRzbXBfcm1iKCk7IC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGNmX2dhY3RfaW5pdCgpICovXG4gXHRpZiAocGFjayAlIGdhY3QtXHUwMDNldGNmZ19wdmFsKVxuIFx0XHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZfYWN0aW9uO1xuIFx0cmV0dXJuIGdhY3QtXHUwMDNldGNmZ19wYWN0aW9uO1xuQEAgLTEzMywxMSArMTMxLDggQEAgc3RhdGljIGludCB0Y2ZfZ2FjdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIFx0aWYgKHBfcGFybSkge1xuIFx0XHRnYWN0LVx1MDAzZXRjZmdfcGFjdGlvbiA9IHBfcGFybS1cdTAwM2VwYWN0aW9uO1xuIFx0XHRnYWN0LVx1MDAzZXRjZmdfcHZhbCAgICA9IG1heF90KHUxNiwgMSwgcF9wYXJtLVx1MDAzZXB2YWwpO1xuLVx0XHQvKiBNYWtlIHN1cmUgdGNmZ19wdmFsIGlzIHdyaXR0ZW4gYmVmb3JlIHRjZmdfcHR5cGVcbi1cdFx0ICogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBnYWN0X25ldF9yYW5kKCkgXHUwMDI2IGdhY3RfZGV0ZXJtKClcbi1cdFx0ICovXG4tXHRcdHNtcF93bWIoKTtcbi1cdFx0Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlICAgPSBwX3Bhcm0tXHUwMDNlcHR5cGU7XG4rXHRcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHRjZl9nYWN0X2FjdCgpLiAqL1xuK1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZnYWN0LVx1MDAzZXRjZmdfcHR5cGUsIHBfcGFybS1cdTAwM2VwdHlwZSk7XG4gXHR9XG4gI2VuZGlmXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbkBAIC0xNjAsNyArMTU1LDggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYWN0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuICNpZmRlZiBDT05GSUdfR0FDVF9QUk9CXG4gXHR7XG4tXHR1MzIgcHR5cGUgPSBSRUFEX09OQ0UoZ2FjdC1cdTAwM2V0Y2ZnX3B0eXBlKTtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbitcdHUzMiBwdHlwZSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlKTtcbiBcbiBcdGlmIChwdHlwZSlcbiBcdFx0YWN0aW9uID0gZ2FjdF9yYW5kW3B0eXBlXShnYWN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM4LjE2OTE1NTg4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNTk4MjU2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBCYXJyaWVyIFJlZmFjdG9yaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBzd2FwcGluZyBvdXQgaW5zdGFuY2VzIG9mIGBzbXBfd21iKClgICsgYFdSSVRFX09OQ0UoKWAgYW5kIGBSRUFEX09OQ0UoKWAgKyBgc21wX3JtYigpYCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmUoKWAgYWNyb3NzIGEgYnVuY2ggb2Yga2VybmVsIHN1YnN5c3RlbXMuIEZpcnN0IHRob3VnaHQ6IHRoaXMgbG9va3MgbGlrZSBhIG1lbW9yeSBiYXJyaWVyIHJlZmFjdG9yaW5nLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCBmdW5jdGlvbmFsbHksIGRvZXMgdGhpcyBhY3R1YWxseSAqY2hhbmdlKiBhbnl0aGluZz8gTWVtb3J5IG9yZGVyaW5nIHNlbWFudGljcyBhcmUgZXNzZW50aWFsbHkgcHJlc2VydmVkLCBidXQgYWNxdWlyZS9yZWxlYXNlIGlzIGNsZWFuZXIgYW5kIGNhbiBiZSBtb3JlIGVmZmljaWVudCBvciBjb3JyZWN0IG9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgYW5kIGl0IGFwcGVhcnMgdGhlcmUncyBhbiBhY3R1YWwgYnVnZml4IGluIHRoZXJlLiBUaGlzIGlzbid0IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmN1cnJlbmN5IGZpeCB0aGF0IGFkZHJlc3NlcyBwb3RlbnRpYWwgZGF0YSByYWNlcy5cblxuTm93LCBkb2VzIHRoaXMgbWVyaXQgZnV6emluZz8gSXQgZGVmaW5pdGVseSBjaGFuZ2VzIHNvbWUgY29yZSBrZXJuZWwgbG9naWMg4oCTIGBmcy9haW9gLCBgZXh0NGAsIGBmaWxlYCwgYHBpZGZzYCwgYHN1cGVyYCwgYHVzZXJfbmFtZXNwYWNlYCwgYHZzcHJpbnRmYCwgYHZsYW5gLCBgY2FuYCwgYHNvY2tfcmV1c2Vwb3J0YCwgYW5kIGBhY3RfZ2FjdGAuIEFuZCBpdCdzIGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWNjZXNzZWQ7IGNoYW5naW5nIHBsYWluIHJlYWRzL3dyaXRlcyB0byBhY3F1aXJlL3JlbGVhc2Ugd2hpY2ggY2hhbmdlcyB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGFuZCBtZW1vcnkgb3JkZXJpbmcgc2VtYW50aWNzLiBUaGUgcGF0Y2ggaXMsIGluIGVmZmVjdCwgYSBmdW5jdGlvbmFsIGNoYW5nZS4gR2l2ZW4gdGhlIHByb21wdCBjcml0ZXJpYSwgaXQncyBub3QgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBhIGNvbnN0YW50IGNoYW5nZSwgdW5yZWFjaGFibGUgY29kZSwgb3IgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLlxuXG5TbywgeWVzLCBpdOKAmXMgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSB0b3VjaGVkIGFuZCBjb3VsZCBiZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYGFpb19jb21wbGV0ZWAsIGBhaW9fcmVhZF9ldmVudHNfcmluZ2AsIGBleHQ0X2dldF9ncm91cHNfY291bnRgLCBgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnRgLCBgZXh0NF91cGRhdGVfc3VwZXJgLCBgZXhwYW5kX2ZkdGFibGVgLCBgZXhwYW5kX2ZpbGVzYCwgYGZkX2luc3RhbGxgLCBgcGlkZmRfaW5mb2AsIGBzdXBlcl9jYWNoZV9jb3VudGAsIGBtYXBfaWRfcmFuZ2VfZG93bmAsIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbV9zdGFydGAsIGBtYXBfd3JpdGVgLCBgZmlsbF9wdHJfa2V5YCwgYF9fcHRyX3RvX2hhc2h2YWxgLCBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBgX192bGFuX2dyb3VwX2dldF9kZXZpY2VgLCBgaXNvdHBfc2VuZG1zZ2AsIGBfX3JldXNlcG9ydF9hZGRfc29ja2AsIGBfX3JldXNlcG9ydF9kZXRhY2hfc29ja2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBgcmV1c2Vwb3J0X21pZ3JhdGVfc29ja2AsIGBnYWN0X25ldF9yYW5kYCwgYGdhY3RfZGV0ZXJtYCwgYHRjZl9nYWN0X2luaXRgLCBhbmQgYHRjZl9nYWN0X2FjdGAuXG5cbkkgd2FudCB0byBwaWNrIHNvbWUgcmVhc29uYWJseSBub24taG90LXBhdGggQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzLiBgYWlvX2NvbXBsZXRlYCBhbmQgYGFpb19yZWFkX2V2ZW50c19yaW5nYCBhcmUgcHJldHR5IGhvdC1wYXRoLCBzbyB0aGF0J3Mgb3V0LiAgYGV4dDRfdXBkYXRlX3N1cGVyYCBnZXRzIGNhbGxlZCBkdXJpbmcgcmVzaXplLCB0aGF0J3Mgbm90IHRvbyBiYWQuIGBleHBhbmRfZmlsZXNgIHdoZW4gb3BlbmluZyBmaWxlcywgZGVjZW50LiAgYHBpZGZkX2luZm9gIGZvciBQSURGRCBpb2N0bHMsIHRoYXQgc291bmRzIGdvb2QuICBgbWFwX3dyaXRlYCBmb3IgYC9wcm9jL3NlbGYvdWlkX21hcGAgd3JpdGVzLCB0aGF0J3MgYSBnb29kIGNhbmRpZGF0ZS4gYGlzb3RwX3NlbmRtc2dgIGZvciBzZW5kaW5nIENBTiBJU09UUCBtZXNzYWdlcywgYWxzbyBsb29rcyBnb29kLiBBbmQsIGB0Y2ZfZ2FjdF9pbml0YCB3aGVuIGNvbmZpZ3VyaW5nIHRjIGdhY3QsIHRoYXQncyBub3QgYmFkLlxuXG5TbyBJJ3ZlIHBpY2tlZCBhIGZldyBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBmdXp6ZWQ6XG4tIGBleHQ0X3VwZGF0ZV9zdXBlcmBcbi0gYHBpZGZkX2luZm9gXG4tIGBtYXBfd3JpdGVgXG4tIGBpc290cF9zZW5kbXNnYFxuLSBgdGNmX2dhY3RfaW5pdGBcblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjAwLjc2NzQxNTc4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMxODk2MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSpleHQ0X3VwZGF0ZV9zdXBlclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvcmVzaXplLmM9MTQwMD1zdGF0aWMgdm9pZCBleHQ0X2FkZF9vdmVyaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xNDE3LSAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MTQxODpzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvcmVzaXplLmMtMTQxOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEgKmZsZXhfZ2QpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NzA9c3RhdGljIGludCBleHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7XFxuZnMvZXh0NC9zdXBlci5jOjcxOnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy03Mi1zdGF0aWMgaW50IGV4dDRfY29tbWl0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTYxMTY9c3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTYyNDktLyogQ29weSBzdGF0ZSBvZiBFWFQ0X1NCKHNiKSBpbnRvIGJ1ZmZlciBmb3Igb24tZGlzayBzdXBlcmJsb2NrICovXFxuZnMvZXh0NC9zdXBlci5jOjYyNTA6c3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNjI1MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjA5LjQ5OTMxNzE3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDcxNDkxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIEV4dDQgU3VwZXJibG9jayBVcGRhdGVzIGluIFJlc2l6ZSBPcGVyYXRpb25zKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gbm90aW5nIHRoYXQgdGhlIGBleHQ0X3VwZGF0ZV9zdXBlcmAgZnVuY3Rpb24gd2l0aGluIGBmcy9leHQ0L3Jlc2l6ZS5jYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCdzIGludGVybmFsIHRvIHRoYXQgY29tcGlsYXRpb24gdW5pdCwgbWFraW5nIGl0IHVubGlrZWx5IHRvIGJlIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmLlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0ICphcmUqIGxpa2VseSBlbnRyeSBwb2ludHMgaW50byB0aGUgcmVzaXplIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayB1cGRhdGUgaXMgYmVpbmcgdHJpZ2dlcmVkIGFuZCB3aGF0IGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIHJlc2l6ZSBwcm9jZXNzIGl0J3MgaW52b2x2ZWQgaW4uIEnigJlsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYW5kbGUgdXNlciByZXF1ZXN0cywgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgb3IgdGhvc2UgdGhhdCBtaWdodCBiZSBleHBvc2VkIHZpYSBWRlMgY2FsbHMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHJlc2l6aW5nIG9wZXJhdGlvbiBwcm9iYWJseSBsaWVzLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgYGV4dDRfdXBkYXRlX3N1cGVyYCBmaXRzIGludG8gdGhhdCBvdmVyYWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzc6MTMuOTQ2NDY4MzgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDY3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfdXBkYXRlX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvcmVzaXplLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9yZXNpemUuYz0xNDAwPXN0YXRpYyB2b2lkIGV4dDRfYWRkX292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTEtLypcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE0MTI6ICogZXh0NF91cGRhdGVfc3VwZXIoKSB1cGRhdGVzIHRoZSBzdXBlciBibG9jayBzbyB0aGF0IHRoZSBuZXdseSBhZGRlZFxcbmZzL2V4dDQvcmVzaXplLmMtMTQxMy0gKiBncm91cHMgY2FuIGJlIHNlZW4gYnkgdGhlIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTctICovXFxuZnMvZXh0NC9yZXNpemUuYzoxNDE4OnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9yZXNpemUuYy0xNDE5LVxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfbmV3X2ZsZXhfZ3JvdXBfZGF0YSAqZmxleF9nZClcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTUzOD1zdGF0aWMgaW50IGV4dDRfZmxleF9ncm91cF9hZGQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtMTU5NC1cXG5mcy9leHQ0L3Jlc2l6ZS5jOjE1OTU6XFx0ZXh0NF91cGRhdGVfc3VwZXIoc2IsIGZsZXhfZ2QpO1xcbmZzL2V4dDQvcmVzaXplLmMtMTU5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzc6MTMuOTkwOTQwMjE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1NTgyNTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYSBmZXcga2V5IG9wZXJhdGlvbnMgaGVyZSwgYW5kIHRoZSBudWFuY2VzIGJldHdlZW4gdGhlbSBhcmUgaW1wb3J0YW50LiBGaXJzdCwgdGhlcmUncyBgZXh0NF9mbGV4X2dyb3VwX2FkZGAuIEknbSBpbW1lZGlhdGVseSBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIGZvciBtZXRhZGF0YSBsYXlvdXQgYW5kIGhvdyB0aGlzIGFmZmVjdHMgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBmaWxlcyBhbmQgc3BhcnNlIGFsbG9jYXRpb24uIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBpbiB0ZXJtcyBvZiBibG9jayBncm91cCBsYXlvdXQgd2hlbiBhZGRpbmcgYSBmbGV4aWJsZSBncm91cD8gSSBuZWVkIHRvIHdlaWdoIHRoZSBiZW5lZml0cyBvZiByZWR1Y2VkIGZyYWdtZW50YXRpb24gYWdhaW5zdCB0aGUgb3ZlcmhlYWQgb2YgbW9yZSBjb21wbGV4IG1ldGFkYXRhIG1hbmFnZW1lbnQuIFRoZW4sIEknbSBwaXZvdGluZyB0byBgZXh0NF9ncm91cF9hZGRgLiBUaGlzIGlzIHRoZSBtb3JlIGdlbmVyYWwgY2FzZSBvZiBhZGRpbmcgYSBibG9jayBncm91cDsgYXJlIHRoZXJlIGRpZmZlcmVuY2VzIGluIHRoZSBhbGdvcml0aG1zIGZvciBhbGxvY2F0aW5nIHRoZSBuZXcgYmxvY2sgZ3JvdXAgdnMgYSBmbGV4aWJsZSBncm91cD8gUGVyaGFwcyB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIG9uIGV4aXN0aW5nIGJsb2NrIGdyb3VwIGxheW91dCBvciBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24sIGFuZCB0aGVzZSBjYW4gaW5mb3JtIGRlY2lzaW9ucyBhYm91dCB0aGUgYmVzdCBhcHByb2FjaC4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBleHQ0X3Jlc2l6ZV9mc2AuIEFyZSB0aGVzZSBhZGRpdGlvbnMgcGFydCBvZiBhIHJlc2l6ZSBvcGVyYXRpb24/IElmIHNvLCB0aGUgY29uc3RyYWludHMgb2YgdGhlIHJlc2l6ZSAoZS5nLiwgd2hldGhlciBpdCdzIGFuIG9ubGluZSBvciBvZmZsaW5lIHJlc2l6ZSkgd2lsbCBkaWN0YXRlIHRoZSBhdmFpbGFibGUgc3RyYXRlZ2llcyBmb3IgYWRkaW5nIGJsb2NrIGdyb3Vwcy4gSXQncyBhIHF1ZXN0aW9uIG9mIGhvdyB0byBleHRlbmQgdGhlIGZpbGUgc3lzdGVtIGVmZmVjdGl2ZWx5LCB3aGlsZSBtaW5pbWl6aW5nIGRpc3J1cHRpb24gdG8gb25nb2luZyBJL08gb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkuIFRoZSBnb2FsIGlzIGVmZmljaWVudCBhbmQgcm9idXN0IGZpbGUgc3lzdGVtIGV4cGFuc2lvbiwgYW5kIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGNvcnJlY3QgYWRkaXRpb24gcHJvY2VkdXJlIGlzIGNyaXRpY2FsIHRvIGFjaGlldmluZyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjIwLjI0Njc2NzcyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjE2MDA5OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKmV4dDRfcmVzaXplX2ZzXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzI4Nj1leHRlcm4gaW50IGV4dDRfZ3JvdXBfZXh0ZW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zMjg4LVxcdFxcdFxcdFxcdGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzI4OTpleHRlcm4gaW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7XFxuZnMvZXh0NC9leHQ0LmgtMzI5MC1leHRlcm4gdW5zaWduZWQgaW50IGV4dDRfbGlzdF9iYWNrdXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jPTE5MTI9c3RhdGljIGludCBleHQ0X2NvbnZlcnRfbWV0YV9iZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xOTk4LSAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MTk5OTppbnQgZXh0NF9yZXNpemVfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IG5fYmxvY2tzX2NvdW50KVxcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjI4LjgwODM3MjUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDQzODE1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIEZpbGVzeXN0ZW0gUmVzaXppbmcqKlxuXG5Pa2F5LCBgZXh0NF9yZXNpemVfZnNgIGZlZWxzIGxpa2UgYSBnb29kLCBzb2xpZCBwb2ludCB0byBiZWdpbiBmb2N1c2luZyBteSBhdHRlbnRpb24uIEl0J3MgYSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSByZXNpemluZyBwcm9jZXNzIGFuZCBsaWtlbHkgaW52b2x2ZXMgbnVtZXJvdXMgY3J1Y2lhbCBpbnRlcmFjdGlvbnMuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoYXQsIGEgcXVpY2sgY2hlY2staW4uIExldCdzIHNlZSBob3cgYHBpZGZkX2luZm9gIHRpZXMgaW50byB0aGlzLiBQZXJoYXBzIHRoZSBQSURGRCBpbmZvcm1hdGlvbiBoYXMgc29tZSByZWxldmFudCBhc3BlY3RzIHdpdGggaG93IHByb2Nlc3NlcyBpbnRlcmFjdCBkdXJpbmcgZmlsZXN5c3RlbSByZXNpemluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozNzozMy43MTI3NTY1MDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzYxNzIzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKnBpZGZkX2luZm9cXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTMzOT1zdGF0aWMgX191MzIgcGlkZnNfY29yZWR1bXBfbWFzayhlbnVtIHRhc2tfZHVtcGFibGUgZHVtcGFibGUpXFxuLS1cXG5mcy9waWRmcy5jLTM2NC1cXG5mcy9waWRmcy5jOjM2NTpzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9waWRmcy5jLTM2Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjQyLjE4ODkzNTg2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU0MzcwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhpcyBkb21haW46XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gYHBpZGZkX2luZm9gKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHBpZGZkX2luZm9gIGhlcmUuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCBpdCdzIGEgKipzdGF0aWMqKiBzdHJ1Y3R1cmUgb3IgdmFyaWFibGUuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIG1lLiBGaXJzdCwgaXRzIHNjb3BlIGlzIGxpa2VseSBsaW1pdGVkLCBwcm9iYWJseSB3aXRoaW4gYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBzb3VyY2UgZmlsZS4gQW5kIHNlY29uZGx5LCBzaW5jZSBpdCdzIHN0YXRpYywgaXQncyB2ZXJ5IGxpa2VseSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGFueSBkYXRhIGl0IGhvbGRzIHdvbid0IGNoYW5nZSBkeW5hbWljYWxseSB1bmxlc3MgdGhlIGNvZGUgZXhwbGljaXRseSB1cGRhdGVzIGl0LlxuXG5BbmQgd2hlcmUgZG9lcyBpdCBjb21lIGludG8gcGxheT8gQWgsIHllcywgaXTigJlzIHVzZWQgd2l0aGluIGBwaWRmZF9pb2N0bGAuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgbWVhbnMgdGhhdCB3aGVuZXZlciB3ZeKAmXJlIGRlYWxpbmcgd2l0aCB0aGUgYHBpZGZkX2lvY3RsYCBzeXN0ZW0gY2FsbCwgdGhlIGNvbnRlbnRzIG9mIGBwaWRmZF9pbmZvYCBhcmUgbGlrZWx5IGJlaW5nIGFjY2Vzc2VkIG9yIG1vZGlmaWVkIGluIHNvbWUgd2F5LiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYHBpZGZkX2lvY3RsYCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZCwgYnV0IHRoaXMgY29ubmVjdGlvbiBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGxpa2VseSBjb250YWlucyBjcnVjaWFsIGluZm9ybWF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIG9mIHRoZSBpb2N0bCBjYWxsLCB3aGljaCBpcyB0eXBpY2FsbHkgZm9yIHByb2Nlc3MgbWFuYWdlbWVudCBvciByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgZGF0YSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjQ2LjY0MzMwOTM4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NTE3ODMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcGlkZmRfaW9jdGxcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTQ5Nz1zdGF0aWMgYm9vbCBwaWRmc19pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxuZnMvcGlkZnMuYy01MjctXFxuZnMvcGlkZnMuYzo1Mjg6c3RhdGljIGxvbmcgcGlkZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL3BpZGZzLmMtNTI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzc6NTUuMDE4NDk0MzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTg2NTM4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6XG5cbioqRXhhbWluaW5nIGBwaWRmZF9pb2N0bGAgYW5kIFBvdGVudGlhbCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBgcGlkZmRfaW9jdGxgIGlzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBqdXN0IGxpa2UgdGhlIG90aGVycy4gSXQncyB0aGUgYGlvY3RsYCBoYW5kbGVyIGZvciB0aGUgcGlkZnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IEkgY2FuIGxldmVyYWdlIGluc3RlYWQ/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHVzaW5nIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGludGVyZmFjZS4gQWgsIHdhaXQgYSBtaW51dGUsIEkgcmVtZW1iZXIgbm93ISBgcGlkZmRfaW9jdGxgIGlzIGFjdHVhbGx5IHJlZ2lzdGVyZWQgd2l0aGluIGBwaWRmc19maWxlX29wZXJhdGlvbnNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCBjbGFyaWZpZXMgaXRzIHVzYWdlIHdpdGhpbiB0aGUgcGlkZnMgY29udGV4dC4gR2l2ZW4gdGhhdCwgdXNpbmcgYHBpZGZkX2lvY3RsYCBkaXJlY3RseSBzaG91bGQgYmUgcGVyZmVjdGx5IGFjY2VwdGFibGUsIG9yIHBvdGVudGlhbGx5IGBzeXNfcGlkZmRfb3BlbmAuIFVsdGltYXRlbHksIHRob3VnaCwgYHBpZGZkX2lvY3RsYCBzZWVtcyBsaWtlIHRoZSBiZXN0IGZpdCBoZXJlLCBnaXZlbiBteSBjdXJyZW50IG5lZWQuIEFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhhdCBkaXJlY3Rpb24gbm93LiBOZXh0LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1hcF93cml0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzgyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MDAuMDE3MTUxNTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg3NjcyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSptYXBfd3JpdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz04OTA9c3RhdGljIGJvb2wgdmVyaWZ5X3Jvb3RfbWFwKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtOTMxLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjkzMjpzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtOTMzLVxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MDguNTA0ODI3NzcyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTM0NTk5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IGFyZSBteSBvd246XG5cbioqTXkgTWVudGFsIE1vZGVsIG9mIGBtYXBfd3JpdGVgKipcblxuUmlnaHQsIHNvIGBtYXBfd3JpdGVgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhIHByZXR0eSBjb21tb24gcGF0dGVybiBmb3IgZnVuY3Rpb25zIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIGEgc3BlY2lmaWMgY29udGV4dC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyAqc3RhdGljKjsgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgd2hlcmUgaXQncyBkZWZpbmVkLCB3aGljaCBvZnRlbiBpbXBsaWVzIHNvbWUgc3BlY2lmaWMgYWNjZXNzIGNvbnRyb2wgb3IgdGhhdCBpdCdzIGNsb3NlbHkgdGllZCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuVGhlbiBJIGxvb2sgYXQgd2hlcmUgaXQgaXMgY2FsbGVkIGZyb20uIEFoYSEgYHByb2NfdWlkX21hcF93cml0ZWAsIGBwcm9jX2dpZF9tYXBfd3JpdGVgLCBhbmQgYHByb2NfcHJvamlkX21hcF93cml0ZWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBgbWFwX3dyaXRlYCBpcyB0aGUgKmNvcmUqIHdyaXRlciBmdW5jdGlvbiBmb3IgKm1hcHBpbmdzKiBvZiBVSURzLCBHSURzLCBhbmQgcHJvaklEcy4gVGhvc2UgYHByb2NfKl9tYXBfd3JpdGVgIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdGhlIGVudHJ5IHBvaW50cyBmb3Igd3JpdGluZyB0aGVzZSBJRCBtYXBwaW5ncyBpbnRvIHRoZSBrZXJuZWwncyBwcm9jZXNzIG5hbWVzcGFjZXMsIGVpdGhlciB2aWEgYC9wcm9jYCBmaWxlc3lzdGVtIGVudHJpZXMgb3IgYSByZWxhdGVkIGludGVyZmFjZS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHBhdHRlcm4gaXMgcHJldHR5IHN0YW5kYXJkLCBJIGNhbiBleHBlY3QgdGhlIGBtYXBfd3JpdGVgIHRvIGxpa2VseSBiZSBkZWFsaW5nIHdpdGggdGhlIGFjdHVhbCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLiBJdHMgc3RhdGljLW5lc3MgcmVpbmZvcmNlcyB0aGlzIGRlc2lnbiwgYXMgaXQncyB0aGUgY29yZSB3b3JraG9yc2UsIGFuZCB0aGUgbmFtZXNwYWNlLXNwZWNpZmljIHdyaXRlcnMgaGFuZGxlIGFueSB2YWxpZGF0aW9uIG9yIHNldHVwLiBJIGNhbiBndWVzcyB0aGVyZSBpcyBkYXRhIHNhbml0aXphdGlvbiBnb2luZyBvbiBpbiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGV5IGhhbmRsZSBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MTMuNTE4Mjk0MTg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk1MDMxODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSpwcm9jX3VpZF9tYXBfd3JpdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmg9MTk5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJvY19wcm9qaWRfc2VxX29wZXJhdGlvbnM7XFxuaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oOjIwMDpleHRlcm4gc3NpemVfdCBwcm9jX3VpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XFxuaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oLTIwMS1leHRlcm4gc3NpemVfdCBwcm9jX2dpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz05MzI9c3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEyMS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMTIyOnNzaXplX3QgcHJvY191aWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTExMjMtXFx0XFx0XFx0ICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcHBvcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MjEuOTEzMzMzNjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDg2OTc1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRm9jdXNpbmcgSW4gb24gdGhlIEtlcm5lbCdzIElTTy1UUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGBwcm9jX3VpZF9tYXBfd3JpdGVgIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgbGVhZCwgYnV0IGxldCdzIHRha2UgYSBxdWljayBkZXRvdXIgYW5kIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSBtb3JlIHJlbGV2YW50IHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgaXNvdHBfc2VuZG1zZ2AuIFdoaWxlIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGlzIGltcG9ydGFudCBmb3Igc2VjdXJpdHkgYW5kIHVzZXItSUQgbWFwcGluZyB3aXRoaW4gdGhlIHByb2Nlc3MgY29udGV4dCwgYGlzb3RwX3NlbmRtc2dgIGhhbmRsZXMgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgSVNPLVRQIG1lc3NhZ2VzLCBzbyBpdCdzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIElTTy1UUCBpbXBsZW1lbnRhdGlvbiBsaWVzLiBLbm93aW5nIGhvdyB0aGF0IHdvcmtzIHdpbGwgbGlrZWx5IGluZm9ybSB0aGUgcmVzdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjI1LjQyMjAzNDcyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NTI4Njc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqaXNvdHBfc2VuZG1zZ1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vaXNvdHAuYz0xMDg4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMTEwMy1cXG5uZXQvY2FuL2lzb3RwLmM6MTEwNDpzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvY2FuL2lzb3RwLmMtMTEwNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjMzLjg5NzMyNzY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NjAzMzU2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVNPVFAgYW5kIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgaXNvdHBfc2VuZG1zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHJlZ2lzdGVyZWQgd2l0aGluIGBpc290cF9vcHNgLiBUaGF0J3MgZ29vZDsgaXQncyBhIGtub3duIHF1YW50aXR5LiBJIHdhcyBicmllZmx5IGNvbnNpZGVyaW5nIHdoZXRoZXIgYGlzb3RwX2JpbmRgIG9yIGBpc290cF9zZXRzb2Nrb3B0YCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBwZXJoYXBzIG5vbi1zdGF0aWMsIGNhbmRpZGF0ZXMgZm9yIGZvY3VzZWQgYW5hbHlzaXMuIEJ1dCwgYXMgdGhlIHNlbmRtc2cgaGFuZGxlciwgYGlzb3RwX3NlbmRtc2dgIHNlZW1zIHBlcmZlY3RseSBmaW5lLiBUaGUgZnV6emVyIHVuZGVyc3RhbmRzIGhvdyB0byBpbnRlcmFjdCB3aXRoIENBTiBJU09UUCBzb2NrZXRzIHZpYSBgc2VuZG1zZ2AsIHNvIHRhcmdldGluZyB0aGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgdGNmX2dhY3RfaW5pdGAuIFNlZSB3aGF0IHRoYXQgY2FuIHRlbGwgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjM5LjY1NzY2NTY0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1NTY4ODc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqdGNmX2dhY3RfaW5pdFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2FjdC5jPTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBnYWN0X3BvbGljeVtUQ0FfR0FDVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTUwLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjUxOnN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy01Mi1cXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6NDguMDEzMzU4OTY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDA0NTIxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqQW5hbHl6aW5nIHRoZSBHbG9iYWwgQWN0aW9uIENsYXNzaWZpZXIgKEdBQykgSW5pdGlhbGl6YXRpb24gYW5kIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdGNmX2dhY3RgIGNvZGUuIEkgc2VlIHRoYXQgdGhlIGB0Y2ZfZ2FjdF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgR0FDLCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci4gSSd2ZSBhbHNvIHRyYWNrZWQgZG93biB0aGF0IGl0J3MgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIHZpYSBgYWN0X2dhY3Rfb3BzLmluaXRgLiBNYWtlcyBzZW5zZSwgc28gZmFyLlxuXG5Ob3cgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnQuIEkndmUgZm91bmQgYHRjZl9nYWN0X2FjdGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpwZXJmb3JtcyogdGhlIGFjdGlvbiBvciBwcm9jZXNzaW5nLiBUaGUgY3JpdGljYWwgZGV0YWlsIGhlcmUgaXMgdGhhdCBpdCdzIG1hcmtlZCBhcyBgVENfSU5ESVJFQ1RfU0NPUEVgLiBUaGlzIHRocm93cyBhIGJpdCBvZiBhIGN1cnZlYmFsbC4gV2hhdCB0aGF0ICp0eXBpY2FsbHkqIG1lYW5zIGlzIHRoYXQgYHRjZl9nYWN0X2FjdGAgaXMgbm9uLXN0YXRpYyAoYXZhaWxhYmxlIGV4dGVybmFsbHkpLCAqdW5sZXNzKiB0aGV5J3ZlIGRpc2FibGVkIGluZGlyZWN0IGNhbGxzLCBhdCB3aGljaCBwb2ludCBpdCdzIHVzdWFsbHkgYHN0YXRpY2AsIG9yIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBzZWUgd2hpY2ggaXMgdGhlIGNhc2UuIEJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLCBpdCBjb3VsZCBiZSBjYWxsZWQgZGlyZWN0bHksIGluZGlyZWN0bHkgb3IgaXQgaXMgc3RhdGljIGFuZCBub3QgY2FsbGVkIGV4dGVybmFsbHkuIFRoaXMgaW1wYWN0cyBob3cgYW5kIHdoZXJlIHRoZSBHQUMgY2FuIGJlIGludm9rZWQuIEkgaGF2ZSB0byBsb29rIGEgbGl0dGxlIGRlZXBlciB0byBzZWUgaG93IGl0J3MgYWN0dWFsbHkgdXNlZCBpbiBhIHByYWN0aWNhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjUzLjI1MzgxNDU0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NjgwMjIzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKnRjZl9nYWN0X2FjdFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTowMS44MDA2MjQ1ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0ODcwNjc3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyB0aGF0IERpZmY6IFRDX0lORElSRUNUX1NDT1BFIGFuZCBza2IqKlxuXG5Pa2F5LCB0aGUgZGlmZuKApiBoYW5nIG9uLiBgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYWN0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLGAgLi4uIHRoYXQgbGluZSBqdW1wcyBvdXQgYXQgbWUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuIGB0Y2ZfZ2FjdF9hY3RgLCB0aGF0J3MgdGhlIGdlbmVyaWMgYWN0aW9uIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yaywgcmlnaHQ/IEFuZCBgc2tiYCwgb2YgY291cnNlLCBpcyB0aGUgY3J1Y2lhbCBzb2NrZXQgYnVmZmVyLiBCdXQgdGhlIGBUQ19JTkRJUkVDVF9TQ09QRWAgaXMgd2hhdCBoYXMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNoYW5nZSBoYXMgb2NjdXJyZWQgYXJvdW5kIHRoaXMgZnVuY3Rpb24gY2FsbC4gV2hhdOKAmXMgdXNpbmcgaXQ/IFdoeSBpcyBpdCB0aGVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOToxNy4yODc2OTQ4NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjIyNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9nYWN0X2FjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhY3QuYz01MT1zdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0xMzMtXFx0XFx0Z2FjdC1cXHUwMDNldGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tXFx1MDAzZXB2YWwpO1xcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjEzNDpcXHRcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi9cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0xMzUtXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZmdfcHR5cGUsIHBfcGFybS1cXHUwMDNlcHR5cGUpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMTQ4LVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjE0OTpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMTUwLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYz0yODg9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTI5MS1cXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MjkyOlxcdC5hY3RcXHRcXHQ9XFx0dGNmX2dhY3RfYWN0LFxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTI5My1cXHQuc3RhdHNfdXBkYXRlXFx0PVxcdHRjZl9nYWN0X3N0YXRzX3VwZGF0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzk6MTcuMzU0MzIxNjA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMjczNzU5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEFzeW5jaHJvbm91cyBJL08gTWVjaGFuaXNtcyoqXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGB0Y2ZfZ2FjdF9hY3RgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciBteSBjdXJyZW50IGxpbmUgb2YgaW5xdWlyeS4gV2hlcmUgZG9lcyB0aGlzIGdvPyBEb2VzIGl0IHRpZSBpbnRvIHRoZSBhc3luY2hyb25vdXMgSS9PIHBhdGh3YXlzP1xuXG5IbW0sIEknbSBhbHNvIHRoaW5raW5nIG9mIGBmcy9haW8uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYXN5bmNocm9ub3VzIEkvTy4gSSdtIHJlY2FsbGluZyB0aGF0IGBhaW9fcmVhZF9ldmVudHNfcmluZ2AgZ2V0cyBjYWxsZWQgZnJvbSBgcmVhZF9ldmVudHNgLiBTbywgdGhhdCBzZWVtcyBrZXksIHNpbmNlIGl0J3MgaW52b2x2ZWQgaW4gcmVhZGluZyBldmVudHMgcmVsYXRlZCB0byBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbCBjaGFpbiBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGV2ZW50IGhhbmRsaW5nIGZsb3cuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0Y2ZfZ2FjdF9hY3RgIGFuZCBhc3luY2hyb25vdXMgSS9PLiBJIG11c3QgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOToyNC4zODE2OTk3NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0Mzc3NDQ0ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKnJlYWRfZXZlbnRzXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MTM0Nj1zdGF0aWMgYm9vbCBhaW9fcmVhZF9ldmVudHMoc3RydWN0IGtpb2N0eCAqY3R4LCBsb25nIG1pbl9uciwgbG9uZyBucixcXG4tLVxcbmZzL2Fpby5jLTEzNjItXFxuZnMvYWlvLmM6MTM2MzpzdGF0aWMgbG9uZyByZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxcbmZzL2Fpby5jLTEzNjQtXFx0XFx0XFx0c3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsXFxuLS1cXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmM9MTQ5MT1zdGF0aWMgaW50IGt2bV9saXZlX29wZW5fZXZlbnRzKHN0cnVjdCBwZXJmX2t2bV9zdGF0ICprdm0pXFxuLS1cXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmMtMTU1MS1cXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmM6MTU1MjpzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHN0cnVjdCBwZXJmX2t2bV9zdGF0ICprdm0pXFxudG9vbHMvcGVyZi9idWlsdGluLWt2bS5jLTE1NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTozMi44MTk0NDg2NjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjAyNjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipTdGF0aWMgRnVuY3Rpb24gRGVlcCBEaXZlOiBgcmVhZF9ldmVudHNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGByZWFkX2V2ZW50c2AgaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLiBUaGlzIGlzbid0IHN1cnByaXNpbmcgZ2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGEgbG93LWxldmVsIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIGl0J3Mgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2hlcmUgaXQncyBkZWZpbmVkLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBJL08gZXZlbnQgaGFuZGxpbmcuXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgZmFjdCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYHN5c19pb19nZXRldmVudHNgIHN0cm9uZ2x5IGltcGxpZXMgYSBjb3JlIGZ1bmN0aW9uIHdpdGhpbiB0aGUgSS9PIGV2ZW50IHJldHJpZXZhbCBzeXN0ZW0uIFRoaXMgc2V0dXAgaXMgdHlwaWNhbDsgYHN5c19pb19nZXRldmVudHNgIGlzIGxpa2VseSB0aGUgZXhwb3NlZCBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgdGhhdCB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGgsIGFuZCBgcmVhZF9ldmVudHNgIGlzIHRoZSB1bmRlcmx5aW5nIHdvcmtob3JzZSB0aGF0IGFjdHVhbGx5IHB1bGxzIHRoZSBldmVudCBkYXRhLiBNeSBmb2N1cyBub3cgaXMgb24gdW5kZXJzdGFuZGluZyAqaG93KiBpdCBwcm9jZXNzZXMgdGhlIHJlcXVlc3QgYW5kICp3aGF0KiBvcHRpbWl6YXRpb25zIGl0IHVzZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBpZiB0aGlzIHN0YXRpYyBuYXR1cmUgaXMgY29uY2VhbGluZyBhbnkgZGF0YSByYWNlcyBvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgaWYgdGhlIG9wdGltaXphdGlvbiBpcyB0aHJlYWQgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTozNy4zMzU0Nzc4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3NzU4Njk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqc3lzX2lvX2dldGV2ZW50c1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD0zMTQ9YXNtbGlua2FnZSBsb25nIHN5c19pb19jYW5jZWwoYWlvX2NvbnRleHRfdCBjdHhfaWQsIHN0cnVjdCBpb2NiIF9fdXNlciAqaW9jYixcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMzE1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19ldmVudCBfX3VzZXIgKnJlc3VsdCk7XFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjMxNjphc21saW5rYWdlIGxvbmcgc3lzX2lvX2dldGV2ZW50cyhhaW9fY29udGV4dF90IGN0eF9pZCxcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMzE3LVxcdFxcdFxcdFxcdGxvbmcgbWluX25yLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTo0NS45MTMwNzEzNDFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyNzc1MjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkZvY3VzaW5nIE15IEFuYWx5c2lzKipcblxuUmlnaHQsIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHN5bWJvbCB0byByZWFsbHkgZGlnIGludG8uIEl0J3MgYSBrZXkgZW50cnkgcG9pbnQsIGFuZCB0aGF0IG9mdGVuIG1lYW5zIGl0J3MgY2VudHJhbCB0byB0aGUgb3BlcmF0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cbkJ1dCB3YWl0LCB3aGF0IGFib3V0IGBmcy9maWxlLmNgPyBUaGF0IGZlZWxzIGxpa2UgYSByZWxldmFudCBhcmVhIHRvIGV4YW1pbmUgdG9vLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgSS9PLiBJIGJldCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGxvdy1sZXZlbCBpbnRlcmFjdGlvbiBkZXRhaWxzLiBBaCwgYW5kIGhlcmUncyBhIHBvdGVudGlhbGx5IHVzZWZ1bCBub3RlLCBgZXhwYW5kX2ZpbGVzYCBpcyBjYWxsZWQgZnJvbSBgYWxsb2NfZmRgLiBHb29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM5OjUwLjg0MDgyNTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjU5NDE0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSphbGxvY19mZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZpbGUuYz01NDM9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfZmQoc3RydWN0IGZkdGFibGUgKmZkdCwgdW5zaWduZWQgaW50IHN0YXJ0KVxcbi0tXFxuZnMvZmlsZS5jLTU2Ny0gKi9cXG5mcy9maWxlLmM6NTY4OnN0YXRpYyBpbnQgYWxsb2NfZmQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgZmxhZ3MpXFxuZnMvZmlsZS5jLTU2OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM5OjU5LjUwMDI0NzE3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE3NDc2NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgYGFsbG9jX2ZkYCBGdW5jdGlvbidzIFNjb3BlIGFuZCBVc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhbGxvY19mZGAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaGFzIGludGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0J3MgZGVmaW5lZC4gVGhpcyBpcyBhIGNydWNpYWwgZGVzaWduIGNob2ljZSwgbGlrZWx5IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGZpbGUgZGVzY3JpcHRvciBhbGxvY2F0aW9uIGxvZ2ljIGFuZCBwcmV2ZW50IGFjY2lkZW50YWwgbWlzdXNlIG9yIG1vZGlmaWNhdGlvbiBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLiBJdCBhbHNvIGltcGxpZXMgaXQncyBub3QgYSBmdW5jdGlvbiB0aGF0J3MgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBmb3IgZ2VuZXJhbCB1c2UuXG5cbk5vdywgdGhlIGNvZGUgbWVudGlvbnMgdGhhdCBgYWxsb2NfZmRgIGlzIGNhbGxlZCBmcm9tIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYC4gVGhpcyBpcyB0aGUga2V5LiBHaXZlbiB0aGF0LCBJIGNhbiBkZWR1Y2UgdGhhdCBgZ2V0X3VudXNlZF9mZF9mbGFnc2AgbGlrZWx5IHBlcmZvcm1zIHNvbWUgaGlnaGVyLWxldmVsIHRhc2sgaW52b2x2aW5nIGZpbmRpbmcgb3IgY3JlYXRpbmcgYSBmaWxlIGRlc2NyaXB0b3IsIGFuZCBgYWxsb2NfZmRgIGlzIHRoZSBsb3ctbGV2ZWwgdXRpbGl0eSBmdW5jdGlvbiBpdCBjYWxscyB0byBhY3R1YWxseSBncmFiIGFuIGF2YWlsYWJsZSBkZXNjcmlwdG9yLiBgZ2V0X3VudXNlZF9mZF9mbGFnc2AgcHJvYmFibHkgc2V0cyBmbGFncyBkdXJpbmcgdGhpcyBhbGxvY2F0aW9uLCB0aG91Z2ggd2l0aG91dCBhIGxvb2sgYXQgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBJIGNhbiBvbmx5IHNwZWN1bGF0ZSBvbiB0aGUgZGV0YWlscy5cblxuVGhlIGZhY3QgdGhhdCB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBpbnRlcnR3aW5lZCB0ZWxscyBtZSB0aGVyZSdzIHByb2JhYmx5IGEgdGlnaHQgY291cGxpbmcgYmV0d2VlbiB0aGUgdGFzayBvZiAqZmluZGluZyogdGhlIGRlc2NyaXB0b3IgKGluIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCksICphbGxvY2F0aW5nKiBpdCAodXNpbmcgYGFsbG9jX2ZkYCksIGFuZCBwb3RlbnRpYWxseSBzZXR0aW5nIGZsYWdzIG9uIHRoZSBuZXcgZGVzY3JpcHRvci4gTWFrZXMgc2Vuc2UuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgbW9kdWxhcml0eSBvZiB0aGUgY29kZSBhIGJpdCBiZXR0ZXIuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGF0IGBhbGxvY19mZGAgaXMgYSAqdmVyeSogaW1wb3J0YW50IHV0aWxpdHkgZm9yIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjA0LjYxNzcyNjc4OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5NTU4NzIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqZ2V0X3VudXNlZF9mZF9mbGFnc1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZpbGUuYz02MTM9aW50IF9fZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgbG9uZyBub2ZpbGUpXFxuLS1cXG5mcy9maWxlLmMtNjE3LVxcbmZzL2ZpbGUuYzo2MTg6aW50IGdldF91bnVzZWRfZmRfZmxhZ3ModW5zaWduZWQgZmxhZ3MpXFxuZnMvZmlsZS5jLTYxOS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD05MT1leHRlcm4gaW50IF9fZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgbG9uZyBub2ZpbGUpO1xcbmluY2x1ZGUvbGludXgvZmlsZS5oOjkyOmV4dGVybiBpbnQgZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9maWxlLmgtOTMtZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9mZCh1bnNpZ25lZCBpbnQgZmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MDoxMy4zMTMzMTg5MzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NTYxOTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gU29ja2V0IFJldXNlIGFuZCBVbnVzZWQgRmlsZSBEZXNjcmlwdG9ycyoqXG5cbk9rYXksIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCDigJMgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCwgc29saWQgcG9pbnQgdG8gc3RhcnQgd2l0aC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyBmaWxlIGRlc2NyaXB0b3JzLCBhbmQgdGhhdCdzIG9mdGVuIHdoZXJlIHNvY2tldCByZXVzZSB0b3VjaGVzIHRoaW5ncy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgcmVsYXRlZCB0byB0aGUgcmV1c2Vwb3J0IGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIGNvbnNpZGVyIGBuZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jYC4gKlRoYXQncyogd2hlcmUgdGhlIGNvcmUgcmV1c2Vwb3J0IGxvZ2ljIHJlc2lkZXMsIHNvIHRoYXQncyBvYnZpb3VzbHkgcmVsZXZhbnQuIEkgc2VlIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGFuZCBgcmV1c2Vwb3J0X21pZ3JhdGVfc29ja2AgYXJlIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBhbmQgdGhlIGZpbGUgZGVzY3JpcHRvciBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSwgYW5kIGhvdyB0aGV5IGhhbmRsZSB0aGUgc3RhdGUgb2Ygc29ja2V0cy4gQXJlIHdlIGNyZWF0aW5nIG5ldyBGRHMsIG1pZ3JhdGluZyBleGlzdGluZyBvbmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBkZWVwZXIgZGl2ZSBpcyBkZWZpbml0ZWx5IGluIG9yZGVyIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDA6MTkuODg4OTQxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE4MjE3ODA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjI4LjQwNzE2NzQ2NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkxNjI5MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIFRoYXQgRGlmZioqXG5cbk9rYXksIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIE15IGluaXRpYWwgcGFzcyB3YXMgcXVpY2ssIGJ1dCBzb21ldGhpbmcncyBuYWdnaW5nIGF0IG1lLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IEkgc2F3IGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGluIHRoZSBjaGFuZ2VzLiBUaGF0J3Mgbm90IGp1c3QgYW55IHJhbmRvbSBmdW5jdGlvbiBvciB2YXJpYWJsZS4gSXQncyBhIGtleSBwaWVjZSB3aGVuIG9wdGltaXppbmcgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgc29ja2V0IGJpbmRpbmcuIFwicmV1c2Vwb3J0LFwiIG9mIGNvdXJzZSwgaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIEkgd29uZGVyIHdoeSB0aGlzIGlzIHJlbGV2YW50LiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIG9yIG1heWJlIGEgY29ycmVjdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dCBvZiB3aGVyZSBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpcyBiZWluZyBpbXBsZW1lbnRlZC4gSXMgdGhpcyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgc2NhbGFiaWxpdHkgYm90dGxlbmVjaz8gQSBwYXJ0aWN1bGFyIGVkZ2UgY2FzZT8gTGV0J3MgdHJhY2UgYmFjayB3aGVyZSB0aGlzIGNoYW5nZSBmaXRzIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBhbmQgc2VlIHRoZSBvdmVyYWxsIHJhdGlvbmFsZS4gSXQgY291bGQgY29tcGxldGVseSBjaGFuZ2UgdGhlIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjQzLjMyMzQ2MTY3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1MzgxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmV1c2Vwb3J0X3NlbGVjdF9zb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00MD1zdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9nZXRfaW5jb21pbmdfY3B1KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00MS17XFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo0MjpcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLiAqL1xcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNDMtXFx0V1JJVEVfT05DRShyZXVzZS1cXHUwMDNlaW5jb21pbmdfY3B1LCByZXVzZS1cXHUwMDNlaW5jb21pbmdfY3B1ICsgMSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTQ2PXN0YXRpYyB2b2lkIF9fcmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSlcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTQ3LXtcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjQ4OlxcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRSgpIGluIHJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKCkuICovXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00OS1cXHRXUklURV9PTkNFKHJldXNlLVxcdTAwM2VpbmNvbWluZ19jcHUsIHJldXNlLVxcdTAwM2VpbmNvbWluZ19jcHUgLSAxKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM9NjQ9dm9pZCByZXVzZXBvcnRfdXBkYXRlX2luY29taW5nX2NwdShzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTgyLVxcdCAqXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo4MzpcXHQgKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLlxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtODQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTQ5Nz1zdGF0aWMgc3RydWN0IHNvY2sgKnJ1bl9icGZfZmlsdGVyKHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UsIHUxNiBzb2NrcyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTI2LVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NTI3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrX2J5X2hhc2goc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSxcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTUyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBoYXNoLCB1MTYgbnVtX3NvY2tzKVxcbi0tXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NTgtLyoqXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo1NTk6ICogIHJldXNlcG9ydF9zZWxlY3Rfc29jayAtIFNlbGVjdCBhIHNvY2tldCBmcm9tIGFuIFNPX1JFVVNFUE9SVCBncm91cC5cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTU2MC0gKiAgQHNrOiBGaXJzdCBzb2NrZXQgaW4gdGhlIGdyb3VwLlxcbi0tXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NjctICovXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo1Njg6c3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NjktXFx0XFx0XFx0XFx0ICAgdTMyIGhhc2gsXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTU5OS1cXHRcXHRpZiAoIXNrMilcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjYwMDpcXHRcXHRcXHRzazIgPSByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaChyZXVzZSwgaGFzaCwgc29ja3MpO1xcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjAxLVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjA2LX1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjYwNzpFWFBPUlRfU1lNQk9MKHJldXNlcG9ydF9zZWxlY3Rfc29jayk7XFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy02MDgtXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTYxOD1zdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X21pZ3JhdGVfc29jayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTY2MS1cXHRpZiAoIW5zaylcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjY2MjpcXHRcXHRuc2sgPSByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaChyZXVzZSwgaGFzaCwgc29ja3MpO1xcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MDo0My40MTIwMDY3NDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0NDA5NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgYW5kIFN0cmluZyBGb3JtYXR0aW5nIFZ1bG5lcmFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHNvIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCBhbmQgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoYXQncyB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24gdG8gZXZhbHVhdGUgYW55IHBvc3NpYmxlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyByZWxhdGVkIHRvIHNvY2tldCByZXVzZSwgZXNwZWNpYWxseSBpbiBtdWx0aS10aHJlYWRlZCBvciBjb25uZWN0aW9uIHBvb2xpbmcgZW52aXJvbm1lbnRzLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byBzdHJpbmcgZm9ybWF0dGluZyBpc3N1ZXMsIHNvIEkgdGhpbmsgdG8gbXlzZWxmOiBcIkxldCdzIGNoZWNrIGBsaWIvdnNwcmludGYuY2AuXCIgV2h5PyBXZWxsLCBgdnNwcmludGZgIGFuZCBpdHMgdmFyaWFudHMgKGxpa2UgYHZzbnByaW50ZmAsIGBzcHJpbnRmYCBldGMuKSBhcmUgbm90b3Jpb3VzIGZvciBmb3JtYXQgc3RyaW5nIHZ1bG5lcmFiaWxpdGllcy4gSWYgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgaXMgcGFzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gYSBmb3JtYXQgc3RyaW5nIGZ1bmN0aW9uLCBpdCdzIGEgaHVnZSByZWQgZmxhZy4gRXZlbiBpZiBub3QgZGlyZWN0bHksIEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSBmbG93LlxuXG5NeSBtaW5kIHRoZW4gcXVpY2tseSBqdW1wcyB0byBzZWFyY2hpbmcgZm9yIGEgY29ubmVjdGlvbjogSXMgYGZpbGxfcHRyX2tleWAgaW52b2x2ZWQgaW4gZ2VuZXJhdGluZyB0aGVzZSBrZXlzLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSB2YWd1ZWx5IHJlbWVtYmVyIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgcHRyX2tleV93b3JrZm5gIG9yIHNvbWV0aGluZyBpbiB0aGF0IGRvbWFpbi4gSWYgdGhhdCdzIHRoZSBjYXNlLCBhbmQgYGZpbGxfcHRyX2tleWAgaXMgdXNlZCB0byBjcmVhdGUgb3IgaW5mbHVlbmNlIGFueSBzdHJpbmcgaW5wdXQsIGVzcGVjaWFsbHkgaWYgYSBwb2ludGVyIG9yIGtleSBvciBzaW1pbGFyLCBpbnRvIGEgYHZzcHJpbnRmYCBvciB0aGUgbGlrZSwgdGhhdCBjb3VsZCBiZWNvbWUgYSB2ZWN0b3IuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRhdGEgZmxvdyB0byBiZSBjZXJ0YWluLiBVbHRpbWF0ZWx5LCBJJ20gdGhpbmtpbmc6IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhlIGdlbmVyYXRlZCBrZXkgY291bGQgY29udGFpbiBmb3JtYXQgc3BlY2lmaWVycywgYW5kIG1pZ2h0IHRoaXMgYmUgZXhwbG9pdGFibGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjQ5LjI1NjEwNjE4N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NTI3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9wdHJfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi92c3ByaW50Zi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi92c3ByaW50Zi5jPTc1OT1zdGF0aWMgc2lwaGFzaF9rZXlfdCBwdHJfa2V5IF9fcmVhZF9tb3N0bHk7XFxubGliL3ZzcHJpbnRmLmMtNzYwLVxcbmxpYi92c3ByaW50Zi5jOjc2MTpzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSlcXG5saWIvdnNwcmludGYuYy03NjIte1xcbi0tXFxubGliL3ZzcHJpbnRmLmM9NzcwPXN0YXRpYyBpbnQgX19pbml0IHZzcHJpbnRmX2luaXRfaGFzaHZhbCh2b2lkKVxcbmxpYi92c3ByaW50Zi5jLTc3MS17XFxubGliL3ZzcHJpbnRmLmM6NzcyOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmlsbF9wdHJfa2V5X25iID0geyAubm90aWZpZXJfY2FsbCA9IGZpbGxfcHRyX2tleSB9O1xcbmxpYi92c3ByaW50Zi5jOjc3MzpcXHRleGVjdXRlX3dpdGhfaW5pdGlhbGl6ZWRfcm5nKFxcdTAwMjZmaWxsX3B0cl9rZXlfbmIpO1xcbmxpYi92c3ByaW50Zi5jLTc3NC1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDA6NDkuMzAxNTYzNjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTkzMTI4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipGb2N1c2luZyBJbndhcmQ6IFdoZXJlIERvZXMgVGhpcyBNYXR0ZXI/KipcblxuT2theSwgc28gYGZpbGxfcHRyX2tleWAgaXMganVzdCBhYm91dCBpbml0aWFsaXphdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3QgdGhhdCBjcml0aWNhbC4gQW5kIGBfX3B0cl90b19oYXNodmFsYCBpcyBvbmx5IHRpZWQgdG8gdGhlIGAlcGAgZm9ybWF0dGluZywgd2hpY2gsIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLCBpcyBwcm9iYWJseSBhIG1pbm9yIGRldGFpbCwgYW5kIHRoZXJlZm9yZSBub3QgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBJJ20gZ29pbmcgdG8gc2V0IHRoYXQgYXNpZGUgZm9yIG5vdy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhlIGB2bGFuYCBhcmVhIG1pZ2h0IGJlIGtleS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIHNoaWZ0ZWQgdG8gd2hhdCBjYWxscyBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBhcyBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgIGlzIGFsc28gY2FsbGVkIGZyb20gdGhlcmUuIEkgc2hvdWxkIGxvb2sgaW50byBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIHNlZSB3aGVyZSBJIHNob3VsZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjU0LjU2MDg4MDI5OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2NTA3NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcmVnaXN0ZXJfdmxhbl9kZXZcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvdmxhbi5jPTEyNT1pbnQgdmxhbl9jaGVja19yZWFsX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTE0NS1cXG5uZXQvODAyMXEvdmxhbi5jOjE0NjppbnQgcmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbm5ldC84MDIxcS92bGFuLmMtMTQ3LXtcXG4tLVxcbm5ldC84MDIxcS92bGFuLmg9MTUwPXZvaWQgdmxhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5uZXQvODAyMXEvdmxhbi5oOjE1MTppbnQgcmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvODAyMXEvdmxhbi5oLTE1Mi12b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjAzLjIyNTk2MjYzM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ0MjA3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGByZWdpc3Rlcl92bGFuX2RldmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMgZXhwbG9yYXRpb24uIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgZXh0NF9yZXNpemVfZnNgLCBgcGlkZmRfaW9jdGxgLCBgcHJvY191aWRfbWFwX3dyaXRlYCwgYGlzb3RwX3NlbmRtc2dgLCBgdGNmX2dhY3RfYWN0YCwgYHN5c19pb19nZXRldmVudHNgLCBgZ2V0X3VudXNlZF9mZF9mbGFnc2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBhbmQsIG9mIGNvdXJzZSwgYHJlZ2lzdGVyX3ZsYW5fZGV2YC5cblxuSG1tLCBgc3lzX2lvX2dldGV2ZW50c2AuLi4gcmlnaHQsIHRoYXQncyBhIHN5c2NhbGwuIEltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBrZWVwIGluIG1pbmQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIGB0Y2ZfZ2FjdF9hY3RgLiBBaCwgeWVzLCBjb25maXJtZWQsIHRoYXQncyBpbiBgbmV0L3NjaGVkL2FjdF9nYWN0LmNgLiBHb29kLCBnb29kLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBmdW5jdGlvbnMuIEknbGwgc3RhcnQgd2l0aDpcblxuKiAgIGBleHQ0X3Jlc2l6ZV9mc2A6IHRoYXQncyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19FWFQ0X0ZTYC5cbiogICBgcGlkZmRfaW9jdGxgOiBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBoZXJlLi4uIGlzIGl0IHJlbGF0ZWQgdG8gYENPTkZJR19QSURfSU5fQ09OVEVYVF9TV0lUQ0hFU2A/IE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBPciBwZXJoYXBzIGBDT05GSUdfUElERlNgPyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgcGlkZmRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyNiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MToxMC4yNzAxNzI0MzZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM1OTA3OTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSURGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6MTEuODMzNzY5MDQyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjYwNTA2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlYmFzZSwgYW5kIEkndmUgaGl0IGEgc25hZy4gTXkgYnJhaW4ganVzdCBkaWQgYSBkb3VibGUtdGFrZTsgYGZzL3BpZGZzLmNgLi4ud2FpdCBhIG1pbnV0ZSwgdGhhdCBzb3VyY2UgZmlsZSwgaXQncyBjb21waWxlZCAqY29uZGl0aW9uYWxseSo/IFRoYXQncyBub3QgdGhlIG5vcm0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhdCBwbGF5IGhlcmUuIFdoeSB3b3VsZG4ndCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgdW5pdmVyc2FsbHkgaW5jbHVkZWQ/IElzIHRoZXJlIGFuIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW5jeT8gQSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24/IFNvbWUgc29ydCBvZiBmZWF0dXJlIGZsYWc/IFRoaXMgcmFpc2VzIGFsbCBzb3J0cyBvZiBxdWVzdGlvbnMgYWJvdXQgcG9ydGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUuIElzIHRoZXJlIGFuICNpZmRlZiBibG9jayBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgaW52b2x2ZWQ/IFRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGJlaW5nIGRyaXZlbiBmcm9tLCBzaW5jZSBub3cgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGUtdGltZSBkZWNpc2lvbiBjcml0ZXJpYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4OTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MToxOC4yNTk4MjI5NDFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzMwOTA2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGlkZnNcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL01ha2VmaWxlLTE3LVxcdFxcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcXFxcbmZzL01ha2VmaWxlOjE4OlxcdFxcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xOS1cXHRcXHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6MjAuNTMyOTIwMjY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjM4MjI0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKktlcm5lbCBDb21waWxhdGlvbiBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBiaXQgb2YgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4gZ29lcyB0byBjb21waWxhdGlvbi4gSXQgYWx3YXlzIGRvZXMsIHJlYWxseS4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgYHByb2NfdWlkX21hcF93cml0ZWAsIGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBDT05GSUdfVVNFUl9OU2AuIEl0J3MgZW1iZWRkZWQgaW4gbXkgbWluZDogdXNlciBuYW1lc3BhY2VzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCB3aWxsIGJlaGF2ZS4gS25vd2luZyBpdCdzICphbHdheXMqIGNvbXBpbGVkIG1lYW5zIHRoaXMgZGVwZW5kZW5jeSBpcyBoYXJkLXdpcmVkIGFuZCBjYW5ub3QgYmUgb3B0aW9uYWxseSBleGNsdWRlZC4gVGhlcmVmb3JlLCBob3cgaXQgaGFuZGxlcyBjb25maWd1cmF0aW9uIGFuZCBwZXJtaXNzaW9ucyB3aWxsIGJlIGNyaXRpY2FsbHkgYWZmZWN0ZWQgYnkgaG93IGBDT05GSUdfVVNFUl9OU2AgaGFzIGJlZW4gc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjI1LjQ5Njc0NDk4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgyMTQwMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSX05TXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDM4PWNvbmZpZyBJUENfTlNcXG4tLVxcbmluaXQvS2NvbmZpZy0xNDQ1LVxcbmluaXQvS2NvbmZpZzoxNDQ2OmNvbmZpZyBVU0VSX05TXFxuaW5pdC9LY29uZmlnLTE0NDctXFx0Ym9vbCBcXFwiVXNlciBuYW1lc3BhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjI3LjE3ODg4OTIwN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY5OTk3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk15IElTT1RQIFNlbmQgRnVuY3Rpb24ncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgaXNvdHBfc2VuZG1zZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBsb2dpYyBhbmQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcmUgY29udGluZ2VudCBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfQ0FOX0lTT1RQYC4gSXQncyBhIHNpbXBsZSwgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3ksIGJ1dCBpdCdzICpjcml0aWNhbCouIFdpdGhvdXQgYENPTkZJR19DQU5fSVNPVFBgIGVuYWJsZWQgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQsIHRoYXQgYGlzb3RwX3NlbmRtc2dgIGZ1bmN0aW9uIHNpbXBseSB3b24ndCBiZSBjb21waWxlZCwgYW5kIGFueSBhdHRlbXB0IHRvIHVzZSBpdCB3aWxsIGZhaWwgc3BlY3RhY3VsYXJseS4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCBmb3IgZW5zdXJpbmcgdGhlIElTT1RQIHRyYW5zcG9ydCBsYXllciBpcyBhY3R1YWxseSBwcmVzZW50IHdoZW4gdGhlIENBTiBzdWJzeXN0ZW0gYXR0ZW1wdHMgdG8gdXRpbGl6ZSBpdC4gSXQgaXMgcGFyYW1vdW50IHRoYXQgdGhpcyBmZWF0dXJlIGlzIGJvdGggYXZhaWxhYmxlIGFuZCBlbmFibGVkIGZvciB0aGUgYXBwbGljYXRpb24gdG8gZnVuY3Rpb24gYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTozMC4zNDg4ODk0NjRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI1MDEwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTozMi4xMDEzOTUxMDZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUyOTIzODQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgVHJhZmZpYyBTaGFwaW5nIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG5ldHdvcmsgdHJhZmZpYyBzaGFwaW5nIGZ1bmN0aW9uYWxpdGllcywgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIEdlbmVyaWMgQWN0aW9uIChHQUNUKSBtb2R1bGUuIFRoZSBpZGVudGlmaWVyIGB0Y2ZfZ2FjdF9hY3RgIGltbWVkaWF0ZWx5IHNpZ25hbHMgSSdtIGRlYWxpbmcgd2l0aCB0aGUgXCJhY3Rpb25cIiBwYXJ0IG9mIHRoaXMsIHRoZSBmaW5hbCBzdGVwIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKFRDKSBwcm9jZXNzLCBub3QgYSBjbGFzc2lmaWVyIG9yIG90aGVyIHVwc3RyZWFtIGNvbXBvbmVudC4gQW5kIHRoZSBkaXJlY3QgcmVmZXJlbmNlIHRvIGBDT05GSUdfTkVUX0FDVF9HQUNUYCBjb25maXJtcyB0aGF0IEknbSBzcGVjaWZpY2FsbHkgZXZhbHVhdGluZyB0aGUgR0FDVCBtb2R1bGUncyBjb25maWd1cmF0aW9uLiBUaGlzIG1lYW5zIEknbSBmb2N1c2VkIG9uIHdoYXQgYWN0aW9ucyBjYW4gYmUgdGFrZW4gb24gcGFja2V0cyBhZnRlciB0aGV5J3ZlIGJlZW4gY2xhc3NpZmllZCBhbmQgZmlsdGVyZWQuIEl0J3MgYSBrZXkgcGFydCBvZiBpbXBsZW1lbnRpbmcgcG9saWNpZXMsIGZyb20gc2ltcGxlIHBvbGljaW5nIGFuZCBkcm9wcGluZyBwYWNrZXRzIHRvIG1vcmUgY29tcGxleCB0YXNrcy4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMgY3JpdGljYWwuIElmIGl0J3MgZGlzYWJsZWQsIHRoZSBHQUNUIGFjdGlvbiBzaW1wbHkgd29uJ3QgYmUgYXZhaWxhYmxlLCBzZXZlcmVseSBsaW1pdGluZyB0cmFmZmljIGNvbnRyb2wgb3B0aW9ucyBhdCB0aGlzIHBvaW50IGluIHRoZSBwYWNrZXQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTozOS42MzA2MzYxMzRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDU5MjE4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9BQ1RfR0FDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz03MTU9Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MjUtXFxubmV0L3NjaGVkL0tjb25maWc6NzI2OmNvbmZpZyBORVRfQUNUX0dBQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZy03MjctXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgYWN0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6NDEuMzM2NTYyNTc5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTM3Mzg2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3lzX2lvX2dldGV2ZW50c2AgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvIGBDT05GSUdfQUlPYC4gVGhhdCdzIHRoZSBrZXkgY29ubmVjdGlvbiBoZXJlLiBgc3lzX2lvX2dldGV2ZW50c2AgaXMsIG9mIGNvdXJzZSwgdGhlIHN5c3RlbSBjYWxsIGZvciByZXRyaWV2aW5nIGFzeW5jaHJvbm91cyBJL08gKEFJTykgZXZlbnRzLiBUaGlua2luZyBhYm91dCBpdCB0aGlzIHdheSBuYXJyb3dzIGRvd24gdGhlIGNvbnRleHQuIFRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0FJT2AgZGljdGF0ZXMgd2hldGhlciB0aGUgZW50aXJlIEFJTyBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGtlcm5lbC4gU28sIGlmIGBDT05GSUdfQUlPYCBpcyBub3QgZW5hYmxlZCwgYHN5c19pb19nZXRldmVudHNgIGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVkLCByaWdodD9cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTo0NC43NTAzMDQ4ODlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTA4NjI5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNT1jb25maWcgU0hNRU1cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTE1LVxcbmluaXQvS2NvbmZpZzoxOTE2OmNvbmZpZyBBSU9cXG5pbml0L0tjb25maWctMTkxNy1cXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTo0Ni41MDExNzYxMloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODYyMjIyMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDaGVja2luZyBDb21waWxhdGlvbiBGbGFncyBhbmQgU29ja2V0IFJldXNlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgZ2V0X3VudXNlZF9mZF9mbGFnc2Ag4oCTIHRoYXQgb25lJ3MgYWx3YXlzIGNvbXBpbGVkIGluLCBubyBwcm9ibGVtIHRoZXJlLiBCdXQgd2hhdCBhYm91dCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYD8gSXMgdGhhdCBjb25zaXN0ZW50bHkgcGFydCBvZiB0aGUgYnVpbGQ/IEkgKnRoaW5rKiBpdCBpcywgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY29tcGlsYXRpb24gY29uZmlndXJhdGlvbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIG1ldGljdWxvdXMgYWJvdXQgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb25zIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBNYWtpbmcgc3VyZSBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgY29tcGlsZWQgaXMgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjUxLjM2MzQwMDY5NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNzAxMTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX3JldXNlcG9ydFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTMtXFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE0OlxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE1LVxcdFxcdFxcdGZpYl9ub3RpZmllci5vIHhkcC5vIGZsb3dfb2ZmbG9hZC5vIGdyby5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6NTMuOTAwNDE4Nzc4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDA1MzE5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBWTEFOIENvbmZpZ3VyYXRpb24qKlxuXG5ZZXMsIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoZW4gZGVhbGluZyB3aXRoIFZMQU4gY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfVkxBTl84MDIxUWAuIFRoYXQgbWFjcm8sIGlmIGRlZmluZWQsIGlzIHdoYXQgZW5hYmxlcyB0aGUgYHJlZ2lzdGVyX3ZsYW5fZGV2YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIGZvciBWTEFOIGRldmljZSByZWdpc3RyYXRpb24uIFdpdGhvdXQgdGhpcyBiZWluZyBzZXQsIHRoZSBWTEFOIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGdvaW5nIHRvIHdvcmsuIEl0J3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjAwLjcwMDk1MzI0OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTgwMjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkxBTl84MDIxUVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvS2NvbmZpZy01LVxcbm5ldC84MDIxcS9LY29uZmlnOjY6Y29uZmlnIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0yMS1cXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXFxubmV0LzgwMjFxL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MDIuMzU2NzYxMTU4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDQ2ODk1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRG91YmxlLUNoZWNraW5nIGV4dDQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBqdXN0IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoYXQgYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBJdCBzb3VuZHMgYmFzaWMsIGJ1dCBJJ3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IHRoYXQgbWlzc2luZyBkZXBlbmRlbmNpZXMgY2FuIHdhc3RlIGEgaHVnZSBhbW91bnQgb2YgdGltZSwgYW5kIGNyZWF0ZSBpc3N1ZXMgdGhhdCBhcmUgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcuIFNvLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnQgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW4uIE5vIGFzc3VtcHRpb25zIGhlcmUuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZsaWN0cyB3aXRoIGFueSBvdGhlciByZWxhdGVkIHNldHRpbmdzIHRoYXQgbWlnaHQgZGlzYWJsZSBpdC4gVGhpcyBpbml0aWFsIGNoZWNrIHdpbGwgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MDguNDYxNDU0NzlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA4NjgzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MTAuMjAyMzMwNDczWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0Nzg5ODc2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQ0FOX0lTT1RQYCwgYE5FVF9BQ1RfR0FDVGAsIGBBSU9gLCBhbmQgYFZMQU5fODAyX1FgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkndmUgZ290IGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyLiBMZXQgbWUgc2VlLi4uIGBleHQ0X3Jlc2l6ZV9mc2AsIGBwaWRmZF9pb2N0bGAsIGBwcm9jX3VpZF9tYXBfd3JpdGVgLCBgaXNvdHBfc2VuZG1zZ2AsIGB0Y2ZfZ2FjdF9hY3RgLCBgc3lzX2lvX2dldGV2ZW50c2AsIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCwgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AsIGFuZCBgcmVnaXN0ZXJfdmxhbl9kZXZgLlxuXG5IbW0sIG5vdywgaG9sZCBvbi4gYHN5c19pb19nZXRldmVudHNgLi4uIHRoYXQncyBhIHN5c2NhbGwsIGlzbid0IGl0PyBTeXprYWxsZXIgcHJvYmFibHkgY2FsbHMgaXQgYGlvX2dldGV2ZW50c2AsIHJpZ2h0PyBNYXliZSBgcmVhZF9ldmVudHNgIHdvdWxkIGJlIGJldHRlcj8gT3IgcGVyaGFwcyBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgPyBUaGF0IG9uZSBpcyBzdGF0aWMuLi4gYnV0IGl0J3MgdGhlIG1vZGlmaWVkIG9uZS4gWWVhaCwgbm8sIGxldCdzIHN0aWNrIHdpdGggYHN5c19pb19nZXRldmVudHNgLiBJdCdzIHRoZSBlbnRyeSBwb2ludCwgc28gdGhhdCdzIHRoZSBjbGVhcmVzdCB0byB1c2UuXG5cbkhhbmcgb24gYSBzZWNvbmQsIHRoYXQgYHBpZGZkX2lvY3RsYCBpcyBhbHNvIHN0YXRpYy4gSSBzaG91bGQgc2VlIGlmIHRoZXJlIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBmb3IgcGlkZmQsIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IHRoZSBiZXN0IHBvc3NpYmxlIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDUyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MjoxNy42ODEzMjA0NTRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDIyMzY1NzE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcGlkZmRfb3BlblxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MjoyNy43MDM2OTMxNjlaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0MDcxMjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBzeXNfcGlkZmRfb3BlbmAgU3lzdGVtIENhbGwqKlxuXG5Pa2F5LCBgc3lzX3BpZGZkX29wZW5gLi4uIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgdGhlIHN0YW5kYXJkIHdheXMgdG8gaW50ZXJhY3Qgd2l0aCBwcm9jZXNzZXMg4oCTIGBmb3JrYCwgYGV4ZWN2ZWAsIHNpZ25hbHMsIG1vbml0b3JpbmcgdmlhIHByb2Nlc3MgSUQuIEJ1dCBgcGlkZmRfb3BlbmA/IFRoaXMgc3VnZ2VzdHMgYSBuZXcsIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvICpmaWxlIGRlc2NyaXB0b3JzKi4gVGhlIFwiZmRcIiBpbiB0aGUgbmFtZSBpcyB0aGUga2V5LiBJdCdzIG5vdCBqdXN0IGEgUElELCBpdOKAmXMgYSAqZGVzY3JpcHRvciogb2YgdGhlIHByb2Nlc3MgaXRzZWxmLCBtYW5hZ2VkIHRocm91Z2ggdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtLCBsaWtlIGV2ZXJ5dGhpbmcgZWxzZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBoYXMgdG8gb2ZmZXIgc29tZXRoaW5nIGJleW9uZCB0aGUgZXhpc3RpbmcgUElELWJhc2VkIG1lY2hhbmlzbXMuIFdoeSBpbnRyb2R1Y2UgYSBuZXcgc3lzY2FsbCBpZiB0aGVyZSB3YXNuJ3QgYSBzaWduaWZpY2FudCBhZHZhbnRhZ2U/IENvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gc2VjdXJpdHksIG5hbWVzcGFjZSBpc29sYXRpb24sIHBlcmhhcHMgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcsIG9yIGJldHRlciBpbnRlZ3JhdGlvbiB3aXRoIGNhcGFiaWxpdGllcz8gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zOiBJcyBpdCBQT1NJWC1jb21wbGlhbnQ/IERvZXMgaXQgYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYXNzb2NpYXRlZCB3aXRoIFBJRCByZXVzZT8gRG9lcyBpdCBwcm92aWRlIGZpbmVyLWdyYWluZWQgY29udHJvbCBvdmVyIHByb2Nlc3Mgb3BlcmF0aW9ucyB0aGFuIHNpZ25hbHMgb3IgYHB0cmFjZWA/IFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgaHVnZSBpZiB0aGlzIGlzIHRoZSBjYXNlLCBhbmQgb3BlbnMgdXAgdGhlIHBvdGVudGlhbCBmb3IgaW1wcm92ZWQgcHJvY2VzcyBtb25pdG9yaW5nLCBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24sIGFuZCBzeXN0ZW0tbGV2ZWwgdG9vbHMuIFRoaXMgaXMgc29tZXRoaW5nIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MzIuNjQ0NDA3OTg3WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY1MDE3NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSpzeXNfcGlkZmRfb3BlblxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD05MTA9YXNtbGlua2FnZSBsb25nIHN5c19zZXRucyhpbnQgZmQsIGludCBuc3R5cGUpO1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDo5MTE6YXNtbGlua2FnZSBsb25nIHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtOTEyLWFzbWxpbmthZ2UgbG9uZyBzeXNfc2VuZG1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1zZyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oLTE2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oOjE3OnN0YXRpYyBpbmxpbmUgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oLTE4LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkLmg9MjI5PXN0YXRpYyBpbmxpbmUgaW50IHdhaXRfZm9yX3BpZChwaWRfdCBwaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oLTI1My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oOjI1NDpzdGF0aWMgaW5saW5lIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oLTI1NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjQyLjQwOTQzNDcwMloiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU4MTAyNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBwaW4gZG93biB0aGUga2V5IHN5c3RlbSBjYWxsIG9yIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYHBpZGZkX2luZm9gLiBJIGtub3cgYHN5c19waWRmZF9vcGVuYCBpcyB0aGUgc3lzY2FsbCB0aGF0IGdldHMgdGhpbmdzIHN0YXJ0ZWQsIGJ1dCBgcGlkZmRfaW5mb2AgaXRzZWxmIHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgcGlkZmRfaW9jdGxgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGEgc3BlY2lmaWMgYHN5c19waWRmZF9pb2N0bGAgc3lzY2FsbD8gTm8sIGl0J3MganVzdCBhIHN0YW5kYXJkIGBpb2N0bGAgb24gdGhlIHBpZGZkLiBUaGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBpcyB0aGUgZ2VuZXJpYyBgc3lzX2lvY3RsYCwgd2hpY2ggaXMgd2F5IHRvbyBicm9hZCB0byBiZSB0cnVseSB1c2VmdWwuXG5cbkhvd2V2ZXIsIGBwaWRmZF9pb2N0bGAgaXMgKnN0YXRpYyouIEhtbS4gVXN1YWxseSwgdGhhdCB3b3VsZCBiZSBhIHByb2JsZW0gZm9yIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciwgYnV0IGl0IGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLiBIb25lc3RseSwgaXQgbWlnaHQgZXZlbiBiZSB0aGUgcGVyZmVjdCBmb2N1cyBzeW1ib2wgaW4gdGhpcyBjYXNlLCBhIHRpZ2h0IGFuZCByZWxldmFudCBvbmUuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIGBwaWRmZF9pb2N0bGAgKmlzKiBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBJIGNhbiBiZSBzdXJlIGlmIEkndmUgaGl0IHRoZSBzd2VldCBzcG90LiBMZXQncyBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6NDguMjY3NTM5NjEyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxODY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaWRmZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9waWRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3BpZGZzLmM9NDk3PXN0YXRpYyBib29sIHBpZGZzX2lvY3RsX3ZhbGlkKHVuc2lnbmVkIGludCBjbWQpXFxuLS1cXG5mcy9waWRmcy5jLTUyNy1cXG5mcy9waWRmcy5jOjUyODpzdGF0aWMgbG9uZyBwaWRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvcGlkZnMuYy01Mjkte1xcbi0tXFxuZnMvcGlkZnMuYz02ODE9c3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcGlkZnMuYy02ODYtXFxuZnMvcGlkZnMuYzo2ODc6XFx0cmV0dXJuIHBpZGZkX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcXG5mcy9waWRmcy5jLTY4OC19XFxuLS1cXG5mcy9waWRmcy5jPTcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaWRmc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9waWRmcy5jLTcxNi0jZW5kaWZcXG5mcy9waWRmcy5jOjcxNzpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IHBpZGZkX2lvY3RsLFxcbmZzL3BpZGZzLmMtNzE4LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjQ4LjMxNDM2NDEwOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODYxODQ4MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMqKlxuXG5SaWdodCwgc28gd2UndmUgZ290IHNvbWV0aGluZyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzICpub3QqIGdvaW5nIHRvIGJlIGlubGluZWQuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gSW4gdGhlIGNvbnRleHQgb2YgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgYW55dGhpbmcgdGhhdCdzIG5vdCBpbmxpbmVkIGlzIGEgcmVkIGZsYWcsIGFzIGl0IGNyZWF0ZXMgYW4gaW50ZXJlc3RpbmcgY2FsbC1jaGFpbiB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZC4gYHBpZGZkX2lvY3RsYCBqdW1wcyBvdXQgYXMgYSBwcmV0dHkgY29tcGVsbGluZyBmb2N1cyBwb2ludCBnaXZlbiB0aGUgY29udGV4dC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdGFrZSBhIGRlZXBlciBkaXZlIGhlcmUuXG5cbkxldCdzIHNlZS4uLiBuZXh0IEkgc2hvdWxkIGNoZWNrIG91dCBgcHJvY191aWRfbWFwX3dyaXRlYC4gR29vZCwgaXQncyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gaXQncyBkaXJlY3RseSByZWFjaGFibGUuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGluaXRpYWwgZXhwbG9yYXRpb24sIGxldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5UaGVuIHdlJ3ZlIGdvdCBgaXNvdHBfc2VuZG1zZ2AuIEFoLCBpdCdzIHN0YXRpYywgd2hpY2ggKmNvdWxkKiByZWR1Y2UgaXRzIGFjY2Vzc2liaWxpdHksIGJ1dCB0aGUgZmFjdCB0aGF0IGl0J3MgYmVpbmcgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpcyBpbnRyaWd1aW5nLiBFdmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIHN0YXRpYywgdGhlIGNhbGwtY2hhaW4gdGhhdCBjYW4gcGFzcyBpdCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaGFzIHRvIGJlIHNjcnV0aW5pemVkLCBhcyBpdCBjb3VsZCBiZSByZWFjaGVkIGZyb20gc29tZXdoZXJlIHdlJ3JlIG5vdCBleHBlY3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6NTQuMTc2MjE0ODY5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwMTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc290cF9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vaXNvdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2lzb3RwLmM9MTA4OD1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTExMDMtXFxubmV0L2Nhbi9pc290cC5jOjExMDQ6c3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2Nhbi9pc290cC5jLTExMDUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jPTIwMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTIwMjAtXFx0LmdldHNvY2tvcHQgPSBpc290cF9nZXRzb2Nrb3B0LFxcbm5ldC9jYW4vaXNvdHAuYzoyMDIxOlxcdC5zZW5kbXNnID0gaXNvdHBfc2VuZG1zZyxcXG5uZXQvY2FuL2lzb3RwLmMtMjAyMi1cXHQucmVjdm1zZyA9IGlzb3RwX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjU0LjIyMjkxOTgxNVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU1MTU2Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgS2VybmVsIFN5bWJvbCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBpc290cF9zZW5kbXNnYCBpcyBsb29raW5nIGdvb2Qg4oCTIG5vIGltbWVkaWF0ZSBjb25jZXJucyB0aGVyZS4gTm93LCBsZXTigJlzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIG90aGVyIGNhbmRpZGF0ZXMgSSd2ZSBiZWVuIGNvbnNpZGVyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC5cblxuYHRjZl9nYWN0X2FjdGAgLSBSaWdodCwgYFRDX0lORElSRUNUX1NDT1BFYCBvbiB0aGF0IG9uZSwgbWVhbmluZyBpdCdzIG5vbi1zdGF0aWMsIGFsbCBnb29kLiBUaGVuLCBgc3lzX2lvX2dldGV2ZW50c2AsIHllcCwgdGhhdCdzIGEgc3lzY2FsbCwgc28gd2UncmUgc2V0IHRoZXJlIGFzIHdlbGwuIE1vdmluZyBvbiwgYGdldF91bnVzZWRfZmRfZmxhZ3NgIOKAkyBhbHNvIG5vbi1zdGF0aWMuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGV4cG9ydGVkLCBhbmQgYHJlZ2lzdGVyX3ZsYW5fZGV2YCB0b28uXG5cbkFscmlnaHQsIHRoYXQgY29uZmlybXMgdGhlIGZvbGxvd2luZyBhcyB0aGUgY29yZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbjpcbi0gICBgZXh0NF9yZXNpemVfZnNgXG4tICAgYHBpZGZkX2lvY3RsYFxuLSAgIGBwcm9jX3VpZF9tYXBfd3JpdGVgXG4tICAgYGlzb3RwX3NlbmRtc2dgXG4tICAgYHRjZl9nYWN0X2FjdGBcbi0gICBgc3lzX2lvX2dldGV2ZW50c2Bcbi0gICBgZ2V0X3VudXNlZF9mZF9mbGFnc2Bcbi0gICBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYFxuLSAgIGByZWdpc3Rlcl92bGFuX2RldmBcblxuQW5kIGluIHRlcm1zIG9mIHJlbGV2YW50IGNvbmZpZ3MsIEknbSBub3Rpbmc6XG4tICAgYEVYVDRfRlNgXG4tICAgYFVTRVJfTlNgXG4tICAgYENBTl9JU09UUGBcbi0gICBgTkVUX0FDVF9HQUNUYFxuLSAgIGBBSU9gXG4tICAgYFZMQU5fODAyMVFgXG5cbldhaXQsIGhhbmcgb24uIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IEkgc2F3IGBzdXBlcl9jYWNoZV9jb3VudGAgaW4gYGZzL3N1cGVyLmNgLiBUaGF0J3MgYSBiaXQgb2YgYSB3cmlua2xlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaW5ncyB0aGF0IGFyZSBzdGF0aWMuIElzIHRoZXJlIGEgYmV0dGVyIGZvY3VzIHN5bWJvbCByZWxhdGVkIHRvIHRoYXQ/IE1heWJlIGBtb3VudF9mc2Agb3IgYHZmc19nZXRfdHJlZWAuLi4gYnV0IGhhbmcgb24sIGBzdXBlcl9jYWNoZV9jb3VudGAgaXMgZmluZSBhY3R1YWxseS4gSSByZWNhbGwgaXQncyBzdGF0aWMsIGJ1dCBJIHRoaW5rIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY2FsbCBzaXRlcywgYnV0IEknbSB0aGlua2luZyB3ZSdyZSBvayBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEzMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzowMS44NzgwODAwNTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjI0OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1cGVyX2NhY2hlX2NvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz0xOTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbmZzL3N1cGVyLmMtMjUwLVxcbmZzL3N1cGVyLmM6MjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbmZzL3N1cGVyLmMtMjUyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxuZnMvc3VwZXIuYy0yNjMtXFx0ICogbGlzdF9scnVfc2hyaW5rX2NvdW50KCkgb3Igc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoKS4gQ291bnRzIGNhblxcbmZzL3N1cGVyLmM6MjY0OlxcdCAqIGNoYW5nZSBiZXR3ZWVuIHN1cGVyX2NhY2hlX2NvdW50IGFuZCBzdXBlcl9jYWNoZV9zY2FuLCBzbyB3ZSByZWFsbHlcXG5mcy9zdXBlci5jLTI2NS1cXHQgKiBkb24ndCBuZWVkIGxvY2tzIGhlcmUuXFxuLS1cXG5mcy9zdXBlci5jPTMzNj1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxcbi0tXFxuZnMvc3VwZXIuYy00MDUtXFx0cy1cXHUwMDNlc19zaHJpbmstXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHN1cGVyX2NhY2hlX3NjYW47XFxuZnMvc3VwZXIuYzo0MDY6XFx0cy1cXHUwMDNlc19zaHJpbmstXFx1MDAzZWNvdW50X29iamVjdHMgPSBzdXBlcl9jYWNoZV9jb3VudDtcXG5mcy9zdXBlci5jLTQwNy1cXHRzLVxcdTAwM2VzX3Nocmluay1cXHUwMDNlYmF0Y2ggPSAxMDI0O1xcbi0tXFxuZnMvc3VwZXIuYz0xOTM1PWludCB2ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvc3VwZXIuYy0xOTYzLVxcdCAqIHN1cGVyX3dha2UoKSBjb250YWlucyBhIG1lbW9yeSBiYXJyaWVyIHdoaWNoIGFsc28gY2FyZSBvZlxcbmZzL3N1cGVyLmM6MTk2NDpcXHQgKiBvcmRlcmluZyBmb3Igc3VwZXJfY2FjaGVfY291bnQoKS4gV2UgcGxhY2UgaXQgYmVmb3JlIHNldHRpbmdcXG5mcy9zdXBlci5jLTE5NjUtXFx0ICogU0JfQk9STiBhcyB0aGUgZGF0YSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHR3byBmdW5jdGlvbnMgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MDEuOTIzMzA5NzUxWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTUyODA4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBUYXJnZXQgRnVuY3Rpb24gTGlzdCoqXG5cbk9rYXksIHNvIGBzdXBlcl9jYWNoZV9jb3VudGAgc2VlbXMgZmluZSwgYnV0IGdldHRpbmcgYXQgc2hyaW5rZXJzIGRpcmVjdGx5IGlzIHByb3ZpbmcgZGlmZmljdWx0LiBJIHRoaW5rIGB2ZnNfZ2V0X3RyZWVgIGlzIGEgYmV0dGVyIGVudHJ5IHBvaW50LCBlc3BlY2lhbGx5IHNpbmNlIGl0IHJlbGF0ZXMgdG8gbW91bnQgcGF0aHMgZGlyZWN0bHkuIExldCdzIGFkZCB0aGF0LlxuXG5Ib2xkIG9uLCBgZ2V0X3VudXNlZF9mZF9mbGFnc2AgaXMgY2FsbGVkIGR1cmluZyBmaWxlIG9wZW5pbmcsIHNvIGl0J3MgYSBzdXBlciBob3QgcGF0aCEgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gUmVtb3ZlIGl0LlxuXG5Ob3csIGxldCdzIHRoaW5rLiBgc3lzX2lvX2dldGV2ZW50c2A/IEl0J3MgYSBzcGVjaWZpYyBzeXNjYWxsLCBub3QgYSBnZW5lcmljIGhvdCBwYXRoLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5LiBgcGlkZmRfaW9jdGxgPyBTcGVjaWZpYyB0byBwaWRmZC4gR29vZC4gYHByb2NfdWlkX21hcF93cml0ZWA/IFVzZXIgbmFtZXNwYWNlIHNwZWNpZmljLiBGaW5lLiBIb3cgYWJvdXQgYGlzb3RwX3NlbmRtc2dgPyBTcGVjaWZpYyB0byBDQU4gSVNPVFAuIFllcC4gYHRjZl9nYWN0X2FjdGA/IFRDIEdBQ1Qgc3BlY2lmaWMuIE9rYXkuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgPyBTcGVjaWZpYyB0byBTT19SRVVTRVBPUlQsIGl0J3MgZmluZS4gYHJlZ2lzdGVyX3ZsYW5fZGV2YD8gVkxBTiBzcGVjaWZpYy4gWXVwLiBGaW5hbGx5LCBgZXh0NF9yZXNpemVfZnNgPyBFeHQ0IHJlc2l6ZSwgcGVyZmVjdC5cblxuU28gdGhlIHJlZmluZWQgbGlzdCBpczpcblxuKiAgIGBleHQ0X3Jlc2l6ZV9mc2BcbiogICBgcGlkZmRfaW9jdGxgXG4qICAgYHByb2NfdWlkX21hcF93cml0ZWBcbiogICBgaXNvdHBfc2VuZG1zZ2BcbiogICBgdGNmX2dhY3RfYWN0YFxuKiAgIGBzeXNfaW9fZ2V0ZXZlbnRzYFxuKiAgIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgXG4qICAgYHJlZ2lzdGVyX3ZsYW5fZGV2YFxuKiAgIGB2ZnNfZ2V0X3RyZWVgXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBgdmZzX2dldF90cmVlYC4gSXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGZpbGVzeXN0ZW1zLCB3aGljaCBpcyBpbmZyZXF1ZW50LCBzbyBpdCdzIG5vdCBhIHN1cGVyIGhvdCBwYXRoLiBHb29kLlxuXG5Pa2F5LCBsZXQncyByZS1ldmFsdWF0ZSB0aGUgb3RoZXIgcG90ZW50aWFsIGNhbmRpZGF0ZXMuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGNhbGxlZCBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbiB3aXRoIFNPX1JFVVNFUE9SVCwgc28gaXQncyBvbmx5IGEgaG90IHBhdGggd2l0aCB0aGF0IHNvY2tldCBvcHRpb24gY29uZmlndXJlZCwgYnV0IHN0aWxsIHNwZWNpZmljIGVub3VnaC4gYHRjZl9nYWN0X2FjdGAgaXMgZm9yIHBhY2tldCBwcm9jZXNzaW5nIHdoZW4gR0FDVCBpcyBjb25maWd1cmVkLCBzcGVjaWZpYy4gYHN5c19pb19nZXRldmVudHNgIGlzIGEgc3lzdGVtIGNhbGwsIG5vdCBnZW5lcmljLiBgcGlkZmRfaW9jdGxgIGlzIHNwZWNpZmljYWxseSBmb3IgcGlkZmQuIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGlzIGZvciB1c2VyIG5hbWVzcGFjZS4gYGlzb3RwX3NlbmRtc2dgIGlzIGZvciBDQU4gSVNPVFAuIGByZWdpc3Rlcl92bGFuX2RldmAgaXMgZm9yIFZMQU4sIGFuZCBgZXh0NF9yZXNpemVfZnNgIGlzIGZvciB0aGUgZXh0NCByZXNpemUuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEkgdGhpbmsgSSBuZWVkOiBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX1VTRVJfTlNgLCBgQ09ORklHX0NBTl9JU09UUGAsIGBDT05GSUdfTkVUX0FDVF9HQUNUYCwgYENPTkZJR19BSU9gLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC5cblxuT2gsIEkgZm9yZ290LiBgQ09ORklHX0NBTl9JU09UUGAgaGFzIGEgcGFyZW50IGNvbmZpZzogYENPTkZJR19DQU5gLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmV0L2Nhbi9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjEzLjQ3NjEyMDMwNFoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMTg2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcXFwibmV0L2Nhbi9qMTkzOS9LY29uZmlnXFxcIlxcbm5ldC9jYW4vS2NvbmZpZy01OC1cXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxcbm5ldC9jYW4vS2NvbmZpZy02MC1cXHR0cmlzdGF0ZSBcXFwiSVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MTMuNTIxMjQ1MzQxWiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTAxMTQ0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBDQU5fSVNPVFAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENBTl9JU09UUGAuIE15IGdvLXRvIGlzIHVzdWFsbHkgdGhlIGBLY29uZmlnYCBmaWxlcywgc28gbGV0J3MgbmF2aWdhdGUgdG8gYG5ldC9jYW4vS2NvbmZpZ2AuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYENBTl9JU09UUGAgaXMgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uLiBJIGV4cGVjdCBJJ2xsIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvbywgYW5kIHBvc3NpYmx5IHNvbWUgYGRlZmF1bHRgIHZhbHVlcyBvciBgaGVscGAgdGV4dCB0aGF0IGdpdmUgbWUgY29udGV4dC4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYENBTl9JU09UUGAgaXMgc2VsZWN0ZWQsIGFuZCBjb252ZXJzZWx5LCB3aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgSSAqZG9uJ3QqIHdhbnQgaXQuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSwgYW5kIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MTcuOTMxMzYyOTA3WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxMTE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0lTT1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzoxNy45NzcyNzk3NzRaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMjYxMTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ0FOX0lTT1RQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucyBhYm91dCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWNzIHJlbGF0ZWQgdG8gYGNvbmZpZyBDQU5fSVNPVFBgLiBUaGlzIGxpbmUgaXMgY3J1Y2lhbCwgYW5kIGl0J3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGUgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBjb25maWd1cmVkLCB3aGF0IGZvbGxvd3MgdGhpcyBsaW5lLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIHRoZSBJU08tVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHNvIGxvb2tpbmcgZGVlcGVyIGF0IHdoYXQgaXMgZGVmaW5lZCBpcyBlc3NlbnRpYWwuIEl0IGNvdWxkIGludm9sdmUgcGFyYW1ldGVycyBmb3IgYWRkcmVzc2luZywgZmxvdyBjb250cm9sLCBmcmFnbWVudGF0aW9uLCBvciBlcnJvciBoYW5kbGluZy4gV2l0aG91dCB0aGF0IGNvbnRleHQsIGFueSBicm9hZGVyIGludGVycHJldGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHdvdWxkIGJlIHByZW1hdHVyZSBhbmQgcG90ZW50aWFsbHkgbWlzbGVhZGluZy4gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gZm9ybSBhIHJlbGlhYmxlIG9waW5pb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjg5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MjIuNDc5ODk1Mzc0WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM2MjE3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUCguKlxcXFxuKXsxLDV9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MjIuNTI5MjY1MTRaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3OTMzOTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ0FOIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCdzIENBTiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIFRoZSBgbmV0L2Nhbi9LY29uZmlnYCBmaWxlIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHdoZXJlIHRoZSBjb3JlIENBTiBmdW5jdGlvbmFsaXRpZXMgYXJlIGRlZmluZWQsIGFuZCBsaWtlbHkgaG9sZHMgdGhlIGtleSB0byB0aGUgb3B0aW9ucyBJIG5lZWQgdG8gZXhhbWluZS4gVXNpbmcgYHJlYWQtZmlsZWAgb24gdGhhdCBzcGVjaWZpYyBLY29uZmlnIGZpbGUgaXMgdGhlIG1vc3QgZWZmaWNpZW50IGZpcnN0IHN0ZXAgdG8gZ2V0IGFuIG92ZXJ2aWV3LiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCBhcmUgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIG9mZmVyIG1lIGEgc3RyYWlnaHRmb3J3YXJkIG91dGxpbmUgb2YgdGhlIGhpZ2gtbGV2ZWwgQ0FOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGVzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MjYuOTA4NjA2OTM5WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NTpcXHRcXHQgIGJ5IHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGtub3duIGUuZy4gZnJvbSBpcHRhYmxlcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBDQU5fSVNPVFBcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBDQU4gVHJhbnNwb3J0IFByb3RvY29scyBvZmZlciBzdXBwb3J0IGZvciBzZWdtZW50ZWQgUG9pbnQtdG8tUG9pbnRcXG4gIDYzOlxcdFxcdCAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIENBTiBub2RlcyB2aWEgdHdvIGRlZmluZWQgQ0FOIElkZW50aWZpZXJzLlxcbiAgNjQ6XFx0XFx0ICBUaGlzIHByb3RvY29sIGRyaXZlciBpbXBsZW1lbnRzIHNlZ21lbnRlZCBkYXRhIHRyYW5zZmVycyBmb3IgQ0FOIENDXFxuICA2NTpcXHRcXHQgIChha2EgQ2xhc3NpY2FsIENBTiwgQ0FOIDIuMEIpIGFuZCBDQU4gRkQgZnJhbWUgdHlwZXMgd2hpY2ggd2VyZVxcbiAgNjY6XFx0XFx0ICBpbnRyb2R1Y2VkIHdpdGggSVNPIDE1NzY1LTI6MjAxNi5cXG4gIDY3OlxcdFxcdCAgQXMgQ0FOIGZyYW1lcyBjYW4gb25seSB0cmFuc3BvcnQgYSBzbWFsbCBhbW91bnQgb2YgZGF0YSBieXRlc1xcbiAgNjg6XFx0XFx0ICAobWF4LiA4IGJ5dGVzIGZvciBDQU4gQ0MgYW5kIG1heC4gNjQgYnl0ZXMgZm9yIENBTiBGRCkgdGhpc1xcbiAgNjk6XFx0XFx0ICBzZWdtZW50YXRpb24gaXMgbmVlZGVkIHRvIHRyYW5zcG9ydCBsb25nZXIgUHJvdG9jb2wgRGF0YSBVbml0cyAoUERVKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzoyNi45MDg2NjMyNzlaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1OTEwNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDQU5fSVNPVFAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ0FOX0lTT1RQYCBhbmQgSSBzZWUgaXQncyBuZXN0ZWQgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGhpbiB0aGUgYENBTmAgbWVudS4gSXQgZG9lc24ndCBhcHBlYXIgdG8gaGF2ZSBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGJleW9uZCB0aGF0LiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgYENBTmAgbWVudSBpdHNlbGYgaXMgbmVjZXNzYXJ5LiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgYENBTmAgaW5mcmFzdHJ1Y3R1cmUgaXMsIGluIGZhY3QsIG5lZWRlZCBiZWZvcmUgYXNzdW1pbmcgYENBTl9JU09UUGAgaXMgcmVsZXZhbnQuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIGNsYXJpZnkgaXRzIHJvbGUgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzozNS4zNjc3NzMwMDlaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzY4Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWctNS1cXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxcbm5ldC9jYW4vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzozNS40MTQ1NDcyODVaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyOTQ0NjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZSBuZWVkIGZvciBgQ0FOYCBjbGVhcmx5LiBOb3csIGJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIGxldCdzIHRha2UgYSBtZXRob2RpY2FsIGFwcHJvYWNoLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0dBQ1RgLiBVbmRlcnN0YW5kaW5nIHdoYXQgYE5FVF9BQ1RfR0FDVGAgcmVsaWVzIHVwb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgbGFuZHNjYXBlIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBgQ0FOYC4gVGhpcyB3aWxsIGhlbHAgbWUgYXZvaWQgYW55IHVuZm9yZXNlZW4gY29uZmxpY3RzIG9yIHJlZHVuZGFudCBlZmZvcnRzIGRvd24gdGhlIGxpbmUuIEl04oCZcyBhYm91dCBiZWluZyBlZmZpY2llbnQgYW5kIGtub3dpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBvciBqdW1waW5nIHRvIGNvbmNsdXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjQwLjQ0Mzk5ODYwN1oiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcbiA3MjY6XFx0Y29uZmlnIE5FVF9BQ1RfR0FDVFxcbiA3Mjc6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgYWN0aW9uc1xcXCJcXG4gNzI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzI5OlxcdFxcdGhlbHBcXG4gNzMwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byB0YWtlIGdlbmVyaWMgYWN0aW9ucyBzdWNoIGFzIGRyb3BwaW5nIGFuZFxcbiA3MzE6XFx0XFx0ICBhY2NlcHRpbmcgcGFja2V0cy5cXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDczNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfZ2FjdC5cXG4gNzM1OlxcdFxcbiA3MzY6XFx0Y29uZmlnIEdBQ1RfUFJPQlxcbiA3Mzc6XFx0XFx0Ym9vbCBcXFwiUHJvYmFiaWxpdHkgc3VwcG9ydFxcXCJcXG4gNzM4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0FDVF9HQUNUXFxuIDczOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjQwLjQ0NDE2MTc1NloiLCJTZXEiOjgxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjYzMzUyMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgTkVUX0NMU19BQ1RgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgSSBhbHNvIHNlZSBgR0FDVF9QUk9CYCBpcyBtb2RpZmllZCBpbiB0aGUgY29kZSwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IGludm9sdmVkLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHBhdGNoIHRvIG1ha2Ugc3VyZS5cblxuQWgsIHllcywgbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbnN0YXRpYyBpbnQgZ2FjdF9uZXRfcmFuZChzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpXG5gYGBcblxuVGhlIGAjaWZkZWYgQ09ORklHX0dBQ1RfUFJPQmAgY29uZmlybXMgbXkgaW5pdGlhbCBvYnNlcnZhdGlvbi4gYEdBQ1RfUFJPQmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LiBOb3csIHRpbWUgdG8gbW92ZSBvbiBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgVkxBTl84MDIxUWAgaW4gcmVsYXRpb24gdG8gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjQ2LjcwNzUxNzMzN1oiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWTEFOXzgwMjFRXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xcbiAgMTA6XFx0XFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxcbiAgMTE6XFx0XFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXFxuICAxMjpcXHRcXHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXFxuICAxMzpcXHRcXHQgIHRoZSAnaXAnIHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxcbiAgMTQ6XFx0XFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XFxuICAxNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LmNhbmRlbGF0ZWNoLmNvbS9+Z3JlZWFyL3ZsYW4uaHRtbFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6NDYuNzA3NTgxNDQ3WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjAzNjg3MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY3kgQ2hlY2s6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gSSBzZWUgbm8gaW1tZWRpYXRlbHkgb2J2aW91cywgZGlyZWN0IGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZS4gR29vZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyAqYSBiaXQqLCBidXQgd2Uga25vdyBiZXR0ZXIgdGhhbiB0byBhc3N1bWUgdG9vIG11Y2ggYXQgdGhpcyBzdGFnZS5cblxuVGltZSB0byBkZWx2ZSBhIGxpdHRsZSBkZWVwZXIgYW5kIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGhpZGRlbiBpc3N1ZXMuIE15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQUlPYC4gSXQncyBhIGtleSBwaWVjZSwgYW5kIGl0cyBpbnRlcmFjdGlvbnMgYXJlIG9mdGVuIHdoZXJlIHRoaW5ncyBiZWNvbWUgc3VidGx5IGludGVyY29ubmVjdGVkIG9yIGNhdXNlIGhlYWRhY2hlcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjU2LjkxMTI3MjYwOVoiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTU6XFx0XFxuMTkxNjpcXHRjb25maWcgQUlPXFxuMTkxNzpcXHRcXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5MTg6XFx0XFx0ZGVmYXVsdCB5XFxuMTkxOTpcXHRcXHRoZWxwXFxuMTkyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgUE9TSVggYXN5bmNocm9ub3VzIEkvTyB3aGljaCBtYXkgYnkgdXNlZFxcbjE5MjE6XFx0XFx0ICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmdcXG4xOTIyOlxcdFxcdCAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suXFxuMTkyMzpcXHRcXG4xOTI0OlxcdGNvbmZpZyBJT19VUklOR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0Mzo1Ni45MTE0MDE1ODlaIiwiU2VxIjo4NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2ODE1Mjc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlIC0gVVNFUl9OUyoqXG5cblJpZ2h0LCBubyBpbW1lZGlhdGUsIG9idmlvdXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFyZSBzY3JlYW1pbmcgYXQgbWUuIFRoYXQncyBnb29kLCBhIGNsZWFuIHNsYXRlIHRvIGJlZ2luIHdpdGggaXMgYWx3YXlzIHByZWZlcmFibGUuIEJ1dCBsZXQncyBub3QgZ2V0IGNvbXBsYWNlbnQuIE15IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IFwibm8gYXBwYXJlbnQgZGVwZW5kZW5jaWVzXCIgb2Z0ZW4gbWFza3Mgc29tZXRoaW5nIHN1YnRsZSwgb3Igc29tZXRoaW5nIHRoYXQncyBvbmx5IHJlbGV2YW50IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBnbyBkZWVwZXIgaW50byB0aGUgZ3V0cyBvZiB0aGUgcHJvYmxlbSwgaXMgYSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uIG9mIGFueXRoaW5nIHJlbGF0ZWQgdG8gYFVTRVJfTlNgLiBJdOKAmXMgYSBjb21tb24gYXJlYSBmb3IgaGlkZGVuIGNvbXBsZXhpdHksIGVzcGVjaWFsbHkgaW4gc3lzdGVtcyBpbnZvbHZpbmcgY29udGFpbmVyaXphdGlvbiwgc2VjdXJpdHksIG9yIHByaXZpbGVnZSBzZXBhcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZSByZWdhcmRpbmcgdXNlciBuYW1lc3BhY2VzLCBhbmQgaG93IHRob3NlIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlbGV2YW50IGNvbXBvbmVudC4gSSBuZWVkIHRvIGlkZW50aWZ5IGlmIGFuZCBob3cgdXNlciBuYW1lc3BhY2UgbWFwcGluZyBhZmZlY3RzIHBlcm1pc3Npb25zLCByZXNvdXJjZSBsaW1pdHMsIG9yIGludGVyYWN0aW9uIHdpdGgga2VybmVsIGZlYXR1cmVzLiBJ4oCZbGwgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcmVsYXRlIHRvIHRoaXMgY29tcG9uZW50LCBmb2N1c2luZyBvbiB0aGUgc2V0dGluZ3MgZm9yIGBVU0VSX05TYC4gVGhlbiwgSeKAmWxsIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGF0ZWQgc2VjdXJpdHkgYWR2aXNvcmllcyBvciBrbm93biB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgY2FyZWZ1bCBhbmFseXNpcyBzaG91bGQgdGVsbCBtZSB3aGV0aGVyIGFueSBpc3N1ZXMgYXJlIHdhaXRpbmcgdG8gbWFuaWZlc3QgdGhlbXNlbHZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjAyLjE3OTU1NjU3M1oiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTExNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDU6XFx0XFxuMTQ0NjpcXHRjb25maWcgVVNFUl9OU1xcbjE0NDc6XFx0XFx0Ym9vbCBcXFwiVXNlciBuYW1lc3BhY2VcXFwiXFxuMTQ0ODpcXHRcXHRkZWZhdWx0IG5cXG4xNDQ5OlxcdFxcdGhlbHBcXG4xNDUwOlxcdFxcdCAgVGhpcyBhbGxvd3MgY29udGFpbmVycywgaS5lLiB2c2VydmVycywgdG8gdXNlIHVzZXIgbmFtZXNwYWNlc1xcbjE0NTE6XFx0XFx0ICB0byBwcm92aWRlIGRpZmZlcmVudCB1c2VyIGluZm8gZm9yIGRpZmZlcmVudCBzZXJ2ZXJzLlxcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHQgIFdoZW4gdXNlciBuYW1lc3BhY2VzIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgaXQgaXNcXG4xNDU0OlxcdFxcdCAgcmVjb21tZW5kZWQgdGhhdCB0aGUgTUVNQ0cgb3B0aW9uIGFsc28gYmUgZW5hYmxlZCBhbmQgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0NDowMi4xNzk2Njg5NDNaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxNjAzMTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSDigJMgbm8gaW1tZWRpYXRlLCBleHBsaWNpdCBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIEdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIGF0IGxlYXN0IGluaXRpYWxseS4gTm93LCBnaXZlbiBteSBhcmVhIG9mIGV4cGVydGlzZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGBFWFQ0X0ZTYCBmZWF0dXJlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IG90aGVyIGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBjb21tb25seSB1c2VkIGFsb25nc2lkZSBFWFQ0LiBJdCdzIGEgZm91bmRhdGlvbmFsIHN0b3JhZ2UgdGVjaG5vbG9neSwgYW5kIEkgbmVlZCBhIHByZWNpc2UgcGljdHVyZSBvZiBpdHMgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwMTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjA3Ljk5NTcwMzYyMloiLCJTZXEiOjg4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDQ6MDcuOTk1NzY4OTgyWiIsIlNlcSI6ODksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTE4ODg5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJ3Qgc2VlbSB0byBoYXZlIGFueSBpbW1lZGlhdGUsIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiBlYWNoIG90aGVyLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgZml0IHRvZ2V0aGVyLiBTbywgbXkgY3VycmVudCBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyIGlzOiBgRVhUNF9GU2AsIGBVU0VSX05TYCwgYENBTmAsIGBDQU5fSVNPVFBgLCBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9HQUNUYCwgYEdBQ1RfUFJPQmAsIGBBSU9gLCBhbmQgYFZMQU5fODAyMVFgLiBUaGV5IGFsbCBzZWVtIHJlbGF0aXZlbHkgc2VsZi1jb250YWluZWQsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lIGNvbXBsZXRlIGluZGVwZW5kZW5jZSBhdCB0aGlzIHBvaW50LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBzb21ldGhpbmcganVzdCBwaW5nZWQgbXkgcmFkYXIuIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBDT05GSUdfQ0FOYC4gSSByZWNhbGwgdGhhdCBgQ0FOYCBpcyB0eXBpY2FsbHkgcHJlc2VudGVkIGFzIGEgbWVudSBlbnRyeSBpbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gQnV0IEkgbmVlZCB0byBkb3VibGUgY2hlY2sgaWYgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBcIkNBTlwiIGlzIGFsc28gaXRzZWxmIGEgZGlzdGluY3QgY29uZmlnIG9wdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJdCdzIGJlc3QgdG8gdmVyaWZ5IHRoaXMgbm93LCBhcyB0aGlzIGNvdWxkIGltcGFjdCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJvY2Vzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzMzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjE0LjU0NzY2MTE3NVoiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjMxMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz0yMj1pZiBDQU5cXG5uZXQvY2FuL0tjb25maWctMjMtXFxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXFxubmV0L2Nhbi9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWctMzMtXFxubmV0L2Nhbi9LY29uZmlnOjM0OmNvbmZpZyBDQU5fQkNNXFxubmV0L2Nhbi9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNhc3QgTWFuYWdlciBDQU4gUHJvdG9jb2wgKHdpdGggY29udGVudCBmaWx0ZXJpbmcpXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTQ1LVxcbm5ldC9jYW4vS2NvbmZpZzo0Njpjb25maWcgQ0FOX0dXXFxubmV0L2Nhbi9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJDQU4gR2F0ZXdheS9Sb3V0ZXIgKHdpdGggbmV0bGluayBjb25maWd1cmF0aW9uKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG5uZXQvY2FuL0tjb25maWctNTgtXFxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcXG5uZXQvY2FuL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIklTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjE0LjU5MzM5MTI4MVoiLCJTZXEiOjkxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTg0MTA3NDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1lbnVjb25maWcgQ0FOYCBlbnRyeS4gVGhhdCBtZWFucyBgQ0FOYCBpcyB0aGUgY29uZmlndXJhdGlvbiBuYW1lIEknbSBpbnRlcmVzdGVkIGluLiBMZXQncyBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZvY3VzIHN5bWJvbHMgSSBuZWVkIHRvIGRlZmluZS4gSSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgZXh0NF9yZXNpemVfZnNgLCBgcGlkZmRfaW9jdGxgLCBgcHJvY191aWRfbWFwX3dyaXRlYCwgYGlzb3RwX3NlbmRtc2dgLCBgdGNmX2dhY3RfYWN0YCwgYHN5c19pb19nZXRldmVudHNgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYW5kIGB2ZnNfZ2V0X3RyZWVgLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBgc3lzX2lvX2dldGV2ZW50c2AuIEkga25vdyBTeXprYWxsZXIgdXNlcyBgaW9fZ2V0ZXZlbnRzYCwgYnV0IHRoZSBrZXJuZWwgc3ltYm9sIGlzIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gQWN0dWFsbHksIG9uIHg4NiwgaXQgbWlnaHQgYmUgYF9feDY0X3N5c19pb19nZXRldmVudHNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgYHN5c19pb19nZXRldmVudHNgIGlzIHRoZSBtb3N0IGRpcmVjdC4gU2hvdWxkIEkgdXNlIGBzeXNfaW9fZ2V0ZXZlbnRzYCBvciBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgPyAgTGV0J3Mgc3RpY2sgd2l0aCBgc3lzX2lvX2dldGV2ZW50c2AgLSBTeXprYWxsZXIgY2FuIGhhbmRsZSB0aGUgbWF0Y2ggdG8gdGhlIHN5c2NhbGwuIEFjdHVhbGx5LCBJIHdhcyBtb2RpZnlpbmcgYSBzdGF0aWMgZnVuY3Rpb24gYGFpb19yZWFkX2V2ZW50c19yaW5nYCBpbiB0aGVyZSBhcyB3ZWxsLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQ0FOYCwgYENBTl9JU09UUGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0dBQ1RgLCBgR0FDVF9QUk9CYCwgYEFJT2AsIGFuZCBgVkxBTl84MDIxUWAuIEFueXRoaW5nIGVsc2UgdG8gY29uc2lkZXI/XG5cbkknbSBhbHNvIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB0byBgZnMvZmlsZS5jYCB3aXRoaW4gYGV4cGFuZF9mZHRhYmxlYCwgYGV4cGFuZF9maWxlc2AsIGFuZCBgZmRfaW5zdGFsbGAsIHdoaWNoIGFyZSBoZWF2aWx5IHVzZWQgaW4gYG9wZW5gLCBgc29ja2V0YCwgYW5kIGBwaXBlYC4gSSBjb3VsZCBhZGQgYSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGVzZSBhcmUgc28gZnVuZGFtZW50YWwgdGhhdCB0aGV5J3JlIGFsbW9zdCBhbHdheXMgaGl0IGFueXdheS4gSSBjb25zaWRlcmVkIGBhbGxvY19mZGAgb3IgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBidXQgSSdtIGdvaW5nIHRvIG9taXQgdGhlbSBzaW5jZSB0aGV5J3JlIHN1Y2ggY29tbW9uIGZ1bmN0aW9ucy5cblxuVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGZzL3BpZGZzLmNgIGFyZSBhcm91bmQgYHBpZGZkX2luZm9gLCBzbyBgcGlkZmRfaW9jdGxgIGlzIGEgZ29vZCBmb2N1cy5cblxuYGZzL3N1cGVyLmNgIG1vZGlmaWNhdGlvbnMgaW52b2x2ZSBgc3VwZXJfY2FjaGVfY291bnRgLCBhbmQgYHZmc19nZXRfdHJlZWAgaXMgdGhlIHJpZ2h0IGZvY3VzLlxuXG5Gb3IgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgSSd2ZSBnb3QgYG1hcF9pZF9yYW5nZV9kb3duYCwgYG1hcF9pZF9yYW5nZV91cGAsIGBtX3N0YXJ0YCwgYW5kIGBtYXBfd3JpdGVgIGNoYW5nZXMuIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGNhcHR1cmVzIHRoZSByZWxldmFudCBwYXJ0LlxuXG5UaGUgYGxpYi92c3ByaW50Zi5jYCBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBgZmlsbF9wdHJfa2V5YCBhbmQgYF9fcHRyX3RvX2hhc2h2YWxgIChmb3IgYCVwYCBmb3JtYXR0aW5nKSDigJMgbm90IGEgaGlnaCBwcmlvcml0eSBmb3IgYSBmb2N1cyBzeW1ib2wuXG5cbmBuZXQvODAyMXEvdmxhbi5jYCB1cGRhdGVzIGluY2x1ZGUgYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCwgc28gYHJlZ2lzdGVyX3ZsYW5fZGV2YCBpcyB0aGUgZm9jdXMuXG5cbkluIGBuZXQvY2FuL2lzb3RwLmNgLCBgaXNvdHBfc2VuZG1zZ2AgaXMgcGVyZmVjdC5cblxuTGFzdGx5LCBgbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY2AgY2hhbmdlcyBpbnZvbHZlIGBfX3JldXNlcG9ydF9hZGRfc29ja2AsIGBfX3JldXNlcG9ydF9kZXRhY2hfc29ja2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBhbmQgYHJldXNlcG9ydF9taWdyYXRlX3NvY2tgLiBJJ2xsIHVzZSBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBhcyB0aGUgcmVwcmVzZW50YXRpdmUuXG5cbmBuZXQvc2NoZWQvYWN0X2dhY3QuY2AgY29udGFpbnMgYGdhY3RfbmV0X3JhbmRgLCBgZ2FjdF9kZXRlcm1gLCBgdGNmX2dhY3RfaW5pdGAsIGFuZCBgdGNmX2dhY3RfYWN0YCwgc28gYHRjZl9nYWN0X2FjdGAgaXMgdGhlIGFwcHJvcHJpYXRlIGZvY3VzLlxuXG5JJ20gZmVlbGluZyBnb29kIGFib3V0IHRoZXNlIHNlbGVjdGlvbnMuIEkgdGhpbmsgdGhpcyBjb3ZlcnMgdGhlIGltcG9ydGFudCBhcmVhcy4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMzAsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjMwLjQzNDQ2OTQ1M1oiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTI0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIGFjcm9zcyBtdWx0aXBsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIChmcywgbmV0LCBrZXJuZWwsIGxpYikgYnkgcmVwbGFjaW5nIHBsYWluIHJlYWRzL3dyaXRlcyBhbmQgc21wX3JtYi93bWIgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIGNvbmN1cnJlbmN5IHNlbWFudGljcywgZml4aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbXByb3ZpbmcgY29ycmVjdG5lc3MuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBsb2dpYywgaW5jbHVkaW5nIGV4dDQgcmVzaXppbmcsIEFJTyBldmVudCByZWFkaW5nLCB1c2VyIG5hbWVzcGFjZSBJRCBtYXBwaW5nLCBDQU4gSVNPVFAgbWVzc2FnZSBzZW5kaW5nLCBhbmQgU09fUkVVU0VQT1JUIHNvY2tldCBzZWxlY3Rpb24uIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIGFjcm9zcyBtdWx0aXBsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIChmcywgbmV0LCBrZXJuZWwsIGxpYikgYnkgcmVwbGFjaW5nIHBsYWluIHJlYWRzL3dyaXRlcyBhbmQgc21wX3JtYi93bWIgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIGNvbmN1cnJlbmN5IHNlbWFudGljcywgZml4aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbXByb3ZpbmcgY29ycmVjdG5lc3MuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBsb2dpYywgaW5jbHVkaW5nIGV4dDQgcmVzaXppbmcsIEFJTyBldmVudCByZWFkaW5nLCB1c2VyIG5hbWVzcGFjZSBJRCBtYXBwaW5nLCBDQU4gSVNPVFAgbWVzc2FnZSBzZW5kaW5nLCBhbmQgU09fUkVVU0VQT1JUIHNvY2tldCBzZWxlY3Rpb24uIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDQ6MzAuNTE0MDAyMTI3WiIsIlNlcSI6OTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU0ODY3MDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjMwLjUxNDU3MzgxN1oiLCJTZXEiOjk0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjU0ODA5NTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiODA4N2RhM2VhNDU4YWJhMGI0ZTFkMTI1MjlkMGJkN2I0MDVlYzRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MzY6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXG5pbmRleCBkNzhhY2M2OWY0ODcwLi40NDEzYzgyNjg4Y2M4IDEwMDY0NFxuLS0tIGEvZnMvYWlvLmNcbisrKyBiL2ZzL2Fpby5jXG5AQCAtMTIwNiwxMyArMTIwNiwxMiBAQCBzdGF0aWMgdm9pZCBhaW9fY29tcGxldGUoc3RydWN0IGFpb19raW9jYiAqaW9jYilcbiBcdC8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlXG4gXHQgKiBtdXN0IG5ldmVyIGV2ZW4gbG9vayBhdCBpdCBhZ2FpblxuIFx0ICovXG4tXHRzbXBfd21iKCk7XHQvKiBtYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cbi1cbi1cdGN0eC1cdTAwM2V0YWlsID0gdGFpbDtcbitcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZXRhaWwsIHRhaWwpO1xuIFxuIFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcdGhlYWQgPSByaW5nLVx1MDAzZWhlYWQ7XG4tXHRyaW5nLVx1MDAzZXRhaWwgPSB0YWlsO1xuK1x0LyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwsIHRhaWwpO1xuIFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXG4gXHRjdHgtXHUwMDNlY29tcGxldGVkX2V2ZW50cysrO1xuQEAgLTEyODgsMTMgKzEyODcsMTIgQEAgc3RhdGljIGxvbmcgYWlvX3JlYWRfZXZlbnRzX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LFxuIFx0LyogQWNjZXNzIHRvIC1cdTAwM2VyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtXHUwMDNlcmluZ19sb2NrLiAqL1xuIFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcdGhlYWQgPSByaW5nLVx1MDAzZWhlYWQ7XG4tXHR0YWlsID0gcmluZy1cdTAwM2V0YWlsO1xuLVxuIFx0LypcbiBcdCAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UndmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXRcbiBcdCAqIHdlIGFsc28gc2VlIHRoZSBldmVudHMgdGhhdCB3ZXJlIHN0b3JlZCB1cCB0byB0aGUgdGFpbC5cbitcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS5cbiBcdCAqL1xuLVx0c21wX3JtYigpO1xuK1x0dGFpbCA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2cmluZy1cdTAwM2V0YWlsKTtcbiBcbiBcdHByX2RlYnVnKFwiaCV1IHQldSBtJXVcXG5cIiwgaGVhZCwgdGFpbCwgY3R4LVx1MDAzZW5yX2V2ZW50cyk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXG4gfVxuIFxuIC8qXG4tICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCByZXF1aXJlcyB1c2luZyBzbXBfcm1iKCkgYWZ0ZXJ3YXJkcy4gIFNlZVxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcbi0gKiBpbiByZXNpemUuY1xuKyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuK1x0XHRuZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMpO1xuIFxuIFx0cmV0dXJuIG5ncm91cHM7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5pbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xuQEAgLTE0NjIsMTEgKzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbitcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXG4gXHQgKlxuLVx0ICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzXG4tXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4rXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4rXHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXRcbiBcdCAqIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovXG4tXHRzYmktXHUwMDNlc19ncm91cHNfY291bnQgKz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuK1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuK1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzXG4gXHQgKiBhY3RpdmUuICovXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxuLS0tIGEvZnMvZmlsZS5jXG4rKysgYi9mcy9maWxlLmNcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4cGFuZF9maWxlcygpICovXG4rXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXG4gXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cdTAwM2VhdHRyKTtcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0VYSVQpIHtcbi1cdFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXG4gXHRcdFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVx1MDAzZWNncm91cGlkO1xuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuK1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXHUwMDNlY29yZWR1bXBfbWFzaztcbiBcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uNTg2MGRhZWE2ZDQwNSAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yNjcsMTIgKzI2NywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdCAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XG4gXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xuLVx0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpc1xuLVx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXG4rXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIGFjcXVpcmUgaXMgbWF0Y2hlZFxuK1x0ICogd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYXMgd2UgZG9uJ3QgaG9sZCBsb2NrcyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9CT1JOKSlcbitcdGlmICghKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2ItXHUwMDNlc19mbGFncykgXHUwMDI2IFNCX0JPUk4pKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xuKysrIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbkBAIC0zMTcsOSArMzE3LDkgQEAgbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY29cbiBcbiBzdGF0aWMgdTMyIG1hcF9pZF9yYW5nZV9kb3duKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTM4Myw5ICszODMsOSBAQCBtYXBfaWRfcmFuZ2VfdXBfbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudFxuIFxuIHUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxuIHtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbitcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cyk7XG4gXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDtcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChleHRlbnRzIFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcbiBcdFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTY3Niw5ICs2NzYsOSBAQCBzdGF0aWMgaW50IHByb2ppZF9tX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcyxcbiBcdFx0ICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0bG9mZl90IHBvcyA9ICpwcG9zO1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKHBvcyBcdTAwM2U9IGV4dGVudHMpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTk2Nyw5ICs5NjcsMTEgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0ICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0XG4gXHQgKiB3ZXJlIHdyaXR0ZW4gYmVmb3JlIHRoZSBjb3VudCBvZiB0aGUgZXh0ZW50cy5cbiBcdCAqXG4tXHQgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZVxuLVx0ICogb3JkZXIgYW5kIHNtcF9ybWIoKSBpcyBndWFyYW50ZWVkIHRoYXQgd2UgZG9uJ3QgaGF2ZSBjcmF6eVxuLVx0ICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS5cbitcdCAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50XG4rXHQgKiBkYXRhLiAgV3JpdGVycyB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB0byBlbnN1cmUgYWxsIGV4dGVudFxuK1x0ICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZVxuK1x0ICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZlxuK1x0ICogdGhlIGV4dGVudCBkYXRhIHdoZW4gcmVhZGluZyBucl9leHRlbnRzLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnVzZXJuc19zdGF0ZV9tdXRleCk7XG4gXG5AQCAtMTA5OCw4ICsxMTAwLDggQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRtYXAtXHUwMDNlZm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDtcbiBcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7XG4gXHR9XG4tXHRzbXBfd21iKCk7XG4tXHRtYXAtXHUwMDNlbnJfZXh0ZW50cyA9IG5ld19tYXAubnJfZXh0ZW50cztcbitcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7XG4gXG4gXHQqcHBvcyA9IGNvdW50O1xuIFx0cmV0ID0gY291bnQ7XG5kaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuY1xuaW5kZXggZTI4NWU4YmM0NzEyYS4uZDZmMjM1ZTE0M2I3MiAxMDA2NDRcbi0tLSBhL2xpYi92c3ByaW50Zi5jXG4rKysgYi9saWIvdnNwcmludGYuY1xuQEAgLTc2Miw5ICs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZFxuIHtcbiBcdGdldF9yYW5kb21fYnl0ZXMoXHUwMDI2cHRyX2tleSwgc2l6ZW9mKHB0cl9rZXkpKTtcbiBcbi1cdC8qIFBhaXJzIHdpdGggc21wX3JtYigpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXG4tXHRzbXBfd21iKCk7XG4tXHRXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTtcbiBcdHJldHVybiBOT1RJRllfRE9ORTtcbiB9XG4gXG5AQCAtNzgxLDEyICs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaGFzaHZhbDtcbiBcbi1cdGlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuK1x0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovXG4tXHRzbXBfcm1iKCk7XG4tXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0aGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgXHUwMDI2cHRyX2tleSk7XG4gXHQvKlxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXG5pbmRleCAyZDJlZmI4Nzc5NzVkLi5lMzRhZGEwY2NlYWNmIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTcwLDEwICs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXG5pbmRleCBjNDFjYWFmOTQwOTVmLi42ZGI3MTcyYmRhYWNjIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTU2LDExICs1Niw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuK1x0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbitcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbiBcdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xuaW5kZXggMTU1NTMwYWVkY2UyZS4uMTFiNjUzYmE3YzEwOSAxMDA2NDRcbi0tLSBhL25ldC9jYW4vaXNvdHAuY1xuKysrIGIvbmV0L2Nhbi9pc290cC5jXG5AQCAtMTE1Niw4ICsxMTU2LDggQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRteV9nZW4gPSBpc290cF9pbmNfdHhfZ2VuKFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pKTtcbiBcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIG15X2dlbiwgRUNPTU0pOyAvKiBwcmV2ZW50IHN0YWxlIHNsb3QgbWF0Y2hpbmcgKi9cbiBcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHhfZ2VuLCBteV9nZW4pO1xuLVx0c21wX3dtYigpOyAvKiBzZWUgc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xuLVx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbiBcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXG5pbmRleCAyOTk0OGNiNDRiN2QxLi42ZDNjNTExZDFkZWY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuKysrIGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuQEAgLTEyNSw5ICsxMjUsOCBAQCBzdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9hZGRfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSlcbiB7XG4gXHRyZXVzZS1cdTAwM2Vzb2Nrc1tyZXVzZS1cdTAwM2VudW1fc29ja3NdID0gc2s7XG4tXHQvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4tXHRzbXBfd21iKCk7XG4tXHRyZXVzZS1cdTAwM2VudW1fc29ja3MrKztcbitcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJldXNlLVx1MDAzZW51bV9zb2NrcywgcmV1c2UtXHUwMDNlbnVtX3NvY2tzICsgMSk7XG4gXHRyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpO1xuIH1cbiBcbkBAIC0xNDAsNyArMTM5LDggQEAgc3RhdGljIGJvb2wgX19yZXVzZXBvcnRfZGV0YWNoX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRyZXVzZS1cdTAwM2Vzb2Nrc1tpXSA9IHJldXNlLVx1MDAzZXNvY2tzW3JldXNlLVx1MDAzZW51bV9zb2NrcyAtIDFdO1xuLVx0cmV1c2UtXHUwMDNlbnVtX3NvY2tzLS07XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MsIHJldXNlLVx1MDAzZW51bV9zb2NrcyAtIDEpO1xuIFx0cmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU4MywxMSArNTgzLDkgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cHJvZyA9IHJjdV9kZXJlZmVyZW5jZShyZXVzZS1cdTAwM2Vwcm9nKTtcbi1cdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbitcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuIFx0aWYgKGxpa2VseShzb2NrcykpIHtcbi1cdFx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdFx0c21wX3JtYigpO1xuLVxuIFx0XHRpZiAoIXByb2cgfHwgIXNrYilcbiBcdFx0XHRnb3RvIHNlbGVjdF9ieV9oYXNoO1xuIFxuQEAgLTYzNCwxMyArNjMyLDExIEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfbWlncmF0ZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdGlmICghcmV1c2UpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0c29ja3MgPSBSRUFEX09OQ0UocmV1c2UtXHUwMDNlbnVtX3NvY2tzKTtcbitcdC8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqL1xuK1x0c29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2tzKSlcbiBcdFx0Z290byBmYWlsdXJlO1xuIFxuLVx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGhhc2ggPSBtaWdyYXRpbmdfc2stXHUwMDNlc2tfaGFzaDtcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4gXHRpZiAoIXByb2cgfHwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfU0tfUkVVU0VQT1JUX1NFTEVDVF9PUl9NSUdSQVRFKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuaW5kZXggNTY1ODYwY2NjYmE2ZC4uZDRmMzlmOThlMmNmMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuQEAgLTI1LDcgKzI1LDYgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcztcbiAjaWZkZWYgQ09ORklHX0dBQ1RfUFJPQlxuIHN0YXRpYyBpbnQgZ2FjdF9uZXRfcmFuZChzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpXG4ge1xuLVx0c21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqL1xuIFx0aWYgKGdldF9yYW5kb21fdTMyX2JlbG93KGdhY3QtXHUwMDNldGNmZ19wdmFsKSlcbiBcdFx0cmV0dXJuIGdhY3QtXHUwMDNldGNmX2FjdGlvbjtcbiBcdHJldHVybiBnYWN0LVx1MDAzZXRjZmdfcGFjdGlvbjtcbkBAIC0zNSw3ICszNCw2IEBAIHN0YXRpYyBpbnQgZ2FjdF9kZXRlcm0oc3RydWN0IHRjZl9nYWN0ICpnYWN0KVxuIHtcbiBcdHUzMiBwYWNrID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2Z2FjdC1cdTAwM2VwYWNrZXRzKTtcbiBcbi1cdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiBcdGlmIChwYWNrICUgZ2FjdC1cdTAwM2V0Y2ZnX3B2YWwpXG4gXHRcdHJldHVybiBnYWN0LVx1MDAzZXRjZl9hY3Rpb247XG4gXHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZnX3BhY3Rpb247XG5AQCAtMTMzLDExICsxMzEsOCBAQCBzdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRpZiAocF9wYXJtKSB7XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wYWN0aW9uID0gcF9wYXJtLVx1MDAzZXBhY3Rpb247XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tXHUwMDNlcHZhbCk7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0Y2ZnX3B2YWwgaXMgd3JpdHRlbiBiZWZvcmUgdGNmZ19wdHlwZVxuLVx0XHQgKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGdhY3RfbmV0X3JhbmQoKSBcdTAwMjYgZ2FjdF9kZXRlcm0oKVxuLVx0XHQgKi9cbi1cdFx0c21wX3dtYigpO1xuLVx0XHRnYWN0LVx1MDAzZXRjZmdfcHR5cGUgICA9IHBfcGFybS1cdTAwM2VwdHlwZTtcbitcdFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGNmX2dhY3RfYWN0KCkuICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmdhY3QtXHUwMDNldGNmZ19wdHlwZSwgcF9wYXJtLVx1MDAzZXB0eXBlKTtcbiBcdH1cbiAjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdhY3QtXHUwMDNldGNmX2xvY2spO1xuQEAgLTE2MCw3ICsxNTUsOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBcdHtcbi1cdHUzMiBwdHlwZSA9IFJFQURfT05DRShnYWN0LVx1MDAzZXRjZmdfcHR5cGUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHRjZl9nYWN0X2luaXQoKSAqL1xuK1x0dTMyIHB0eXBlID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZnYWN0LVx1MDAzZXRjZmdfcHR5cGUpO1xuIFxuIFx0aWYgKHB0eXBlKVxuIFx0XHRhY3Rpb24gPSBnYWN0X3JhbmRbcHR5cGVdKGdhY3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDQ6MzAuNTE0NTc0NTc3WiIsIlNlcSI6OTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NTQ4MDcwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrOiBBY3F1aXJlL1JlbGVhc2UgTWVtb3J5IEJhcnJpZXIgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIGBzbXBfcm1iKClgL2BzbXBfd21iKClgIHdpdGggdGhlIG1vcmUgbW9kZXJuIGBzbXBfbG9hZF9hY3F1aXJlKClgL2BzbXBfc3RvcmVfcmVsZWFzZSgpYCBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zIGxpa2UgQUlPLCBleHQ0LCBmaWxlIHN5c3RlbXMsIGFuZCBuZXR3b3JraW5nLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgbWVtb3J5IGJhcnJpZXIgbW9kZXJuaXphdGlvbiBlZmZvcnQsIHdoaWNoIGlzIGdvb2QgaG91c2VrZWVwaW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZXNlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSBuZXcgd2F5cyBmb3IgdGhlIGtlcm5lbCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgYWZ0ZXIgYSBxdWljayBzY2FuLCBpdCBkb2Vzbid0IGFwcGVhciB0aGF0IGFueSBuZXcgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQuIEZ1cnRoZXJtb3JlLCB3ZSBhcmVuJ3QgY2hhbmdpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocywgbm9yIGlzIGFueXRoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS5cblxuRGlnZ2luZyBpbiBhIGxpdHRsZSBkZWVwZXIsIHRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZXBsYWNlbWVudHMgb2YgbWVtb3J5IGJhcnJpZXJzIHdpdGggYWNxdWlyZS9yZWxlYXNlIG9wZXJhdGlvbnMuIFRoZXNlIG9wZXJhdGlvbnMgaW5oZXJlbnRseSBwcm92aWRlIG1lbW9yeSBvcmRlcmluZyBndWFyYW50ZWVzLCBqdXN0IGxpa2UgdGhlIG9sZCBiYXJyaWVycyBkaWQsIHNvIGNvbmNlcHR1YWxseSwgd2UncmUgbWFraW5nIHRoZSBjb2RlIHNhZmVyIG9yIGF0IGxlYXN0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LlxuXG5JIGRpZCBhIGxpbmUtYnktbGluZSBpbnNwZWN0aW9uIG9mIGFsbCB0aGUgY2hhbmdlcywgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGVzIGdpdmVuLlxuXG5JbiB0aGUgY2FzZSBvZiBgZnMvYWlvLmNgLCBmb3IgZXhhbXBsZSwgdGhlIGNvbnZlcnNpb24gaXMgYSBzdGFuZGFyZCBgc21wX3dtYigpYCBhbmQgYXNzaWdubWVudCB0byBhIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCwgd2hpY2ggaXMgcGVyZmVjdGx5IGZpbmUuIGBmcy9leHQ0L2V4dDQuaGAgaXMgYW5vdGhlciBleGFtcGxlIG9mIHN0YW5kYXJkIGNvbnZlcnNpb24uIGBmcy9maWxlLmNgLCBgZnMvcGlkZnMuY2AsIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AsIGBsaWIvdnNwcmludGYuY2AsIGBuZXQvODAyMXEvdmxhbi5jYCwgYG5ldC9jYW4vaXNvdHAuY2AsIGBuZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jYCwgYW5kIGBuZXQvc2NoZWQvYWN0X2dhY3QuY2AgYWxzbyBzaG93IHN0YW5kYXJkIGNvbnZlcnNpb25zLiBOb3RoaW5nIGp1bXBzIG91dCBhcyBwcm9ibGVtYXRpYyBoZXJlLiBObyBuZXcsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSB2aXNpYmxlLlxuXG5Fc3NlbnRpYWxseSwgYWxsIHRoZSBjaGFuZ2VzIGFyZSBqdXN0IHJlcGxhY2luZyBtZW1vcnkgYmFycmllcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2UuIFRoZSBvbGQgYmFycmllcnMgZW5zdXJlZCB0aGUgcmVhZHMgYW5kIHdyaXRlcyB3ZXJlIG9yZGVyZWQgYXMgaW50ZW5kZWQgYW5kIHRoZSBuZXcgaW5zdHJ1Y3Rpb25zIGRvIHRoZSBzYW1lIHRoaW5nLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlZmFjdG9yaW5nLCBhbmQgaW50cm9kdWNlIG5vdGhpbmcgbmV3LCBhIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQuIElmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaXNzdWVzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB0aGV5J2QgYmUgY2F1Z2h0IGJ5IEtDU0FOIG9yIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIGNvZGUgcmV2aWV3LiBUaGlzIGlzbid0IGEgS01TQU4gaXNzdWUsIHNvIE5lZWRzS01TQU4gaXMgZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjcsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjQ3LjA2MjY0OTcxNloiLCJTZXEiOjk2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaXMgYSByZWZhY3RvcmluZyB0aGF0IHJlcGxhY2VzIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWIoKWAgYW5kIGBzbXBfd21iKClgKSB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKGBzbXBfbG9hZF9hY3F1aXJlKClgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2UoKWApIGFjcm9zcyB2YXJpb3VzIHN1YnN5c3RlbXMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZmllbGRzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgY29uY3VycmVuY3kgYnVncyAoZS5nLiwgcmFjZSBjb25kaXRpb25zIGR1ZSB0byBpbmNvcnJlY3QgbWVtb3J5IG9yZGVyaW5nKSwgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4gb3Igc3RhbmRhcmQgdGVzdGluZywgbm90IEtNU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowngqbq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 10:19:53 +0000 UTC FinishedAt: 2026-08-25 10:44:48 +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": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "CAN", "CAN_ISOTP", "NET_CLS_ACT", "NET_ACT_GACT", "GACT_PROB", "AIO", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "CAN", "CAN_ISOTP", "NET_CLS_ACT", "NET_ACT_GACT", "GACT_PROB", "AIO", "VLAN_8021Q" ], "series_id": "a5fd2106-d30e-41d7-9ec7-56c6158c22f8" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "ext4_resize_fs", "pidfd_ioctl", "proc_uid_map_write", "isotp_sendmsg", "tcf_gact_act", "sys_io_getevents", "reuseport_select_sock", "register_vlan_dev", "vfs_get_tree" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FDVCYjMzQ7LAogICAgJiMzNDtHQUNUX1BST0ImIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtwaWRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcm9jX3VpZF9tYXBfd3JpdGUmIzM0OywKICAgICYjMzQ7aXNvdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAgICYjMzQ7c3lzX2lvX2dldGV2ZW50cyYjMzQ7LAogICAgJiMzNDtyZXVzZXBvcnRfc2VsZWN0X3NvY2smIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7dmZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbW9yeSBiYXJyaWVycyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoZnMsIG5ldCwga2VybmVsLCBsaWIpIGJ5IHJlcGxhY2luZyBwbGFpbiByZWFkcy93cml0ZXMgYW5kIHNtcF9ybWIvd21iIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBjb25jdXJyZW5jeSBzZW1hbnRpY3MsIGZpeGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW1wcm92aW5nIGNvcnJlY3RuZXNzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbG9naWMsIGluY2x1ZGluZyBleHQ0IHJlc2l6aW5nLCBBSU8gZXZlbnQgcmVhZGluZywgdXNlciBuYW1lc3BhY2UgSUQgbWFwcGluZywgQ0FOIElTT1RQIG1lc3NhZ2Ugc2VuZGluZywgYW5kIFNPX1JFVVNFUE9SVCBzb2NrZXQgc2VsZWN0aW9uLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiODA4N2RhM2VhNDU4YWJhMGI0ZTFkMTI1MjlkMGJkN2I0MDVlYzRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MzY6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgJiM0MzsxMjA2LDEyIEBAIHN0YXRpYyB2b2lkIGFpb19jb21wbGV0ZShzdHJ1Y3QgYWlvX2tpb2NiICppb2NiKVxuIFx0LyogYWZ0ZXIgZmxhZ2dpbmcgdGhlIHJlcXVlc3QgYXMgZG9uZSwgd2VcbiBcdCAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcdC8qIG1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqL1xuLVxuLVx0Y3R4LVx1MDAzZXRhaWwgPSB0YWlsO1xuJiM0MztcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZXRhaWwsIHRhaWwpO1xuIFxuIFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcdGhlYWQgPSByaW5nLVx1MDAzZWhlYWQ7XG4tXHRyaW5nLVx1MDAzZXRhaWwgPSB0YWlsO1xuJiM0MztcdC8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJpbmctXHUwMDNldGFpbCwgdGFpbCk7XG4gXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcbiBcdGN0eC1cdTAwM2Vjb21wbGV0ZWRfZXZlbnRzJiM0MzsmIzQzOztcbkBAIC0xMjg4LDEzICYjNDM7MTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXG4gXHQvKiBBY2Nlc3MgdG8gLVx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cdTAwM2VyaW5nX2xvY2suICovXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHRhaWwgPSByaW5nLVx1MDAzZXRhaWw7XG4tXG4gXHQvKlxuIFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSYjMzk7dmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXRcbiBcdCAqIHdlIGFsc28gc2VlIHRoZSBldmVudHMgdGhhdCB3ZXJlIHN0b3JlZCB1cCB0byB0aGUgdGFpbC5cbiYjNDM7XHQgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuXG4gXHQgKi9cbi1cdHNtcF9ybWIoKTtcbiYjNDM7XHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwpO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7aCV1IHQldSBtJXVcXG5cJiMzNDssIGhlYWQsIHRhaWwsIGN0eC1cdTAwM2Vucl9ldmVudHMpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0zNTQyLDE2ICYjNDM7MzU0MiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pc2l6ZV9zZXQoc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgbG9mZl90IGlfc2l6ZSlcbiB9XG4gXG4gLypcbi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlXG4tICogdGhlIGxvY2tpbmcgcHJvdG9jb2wgZG9jdW1lbnRlZCBpbiB0aGUgY29tbWVudHMgb2YgZXh0NF9ncm91cF9hZGQoKVxuLSAqIGluIHJlc2l6ZS5jXG4mIzQzOyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXG4mIzQzO1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19ncm91cHNfY291bnQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmNcbmluZGV4IDA2MTcxYTExZGIxMjUuLmExNTI4NTIyNGNkZjYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9tYmFsbG9jLmNcbkBAIC04OTksMTAgJiM0Mzs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuJiM0MztcdFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbiYjNDM7XHRcdG5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0IoYWMtXHUwMDNlYWNfc2IpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3Vwcyk7XG4gXG4gXHRyZXR1cm4gbmdyb3VwcztcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmNcbmluZGV4IDJjNWI4NTFjNTUyYTYuLjVlM2FkODM5M2NmODMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5AQCAtMTQ2MiwxMSAmIzQzOzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbiYjNDM7XHQgKiAqIFdyaXRlcnMgbXVzdCB1c2UgYSByZWxlYXNlIHN0b3JlIHdoZW4gdXBkYXRpbmcgdGhlIGdyb3VwcyBjb3VudFxuJiM0MztcdCAqICAgYWZ0ZXIgYWxsIGRlcGVuZGVudCBkYXRhIGhhcyBiZWVuIHVwZGF0ZWRcbiBcdCAqXG4tXHQgKiAqIFJlYWRlcnMgbXVzdCBwZXJmb3JtIGFuIHNtcF9ybWIoKSBhZnRlciByZWFkaW5nIHRoZSBncm91cHNcbi1cdCAqICAgY291bnQgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiYjNDM7XHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4mIzQzO1x0ICogICBjb3VudCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4gXHQgKlxuIFx0ICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50XG4gXHQgKiB3aGlsZSBmcmVlaW5nIGRhdGEsIGFzIHdlIGNhbiBvbmx5IGFsbG9jYXRlIGZyb20gYSBibG9ja1xuQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKiBvbmx5IHRoZW4gZnJlZSBhZnRlciBzZXJpYWxpc2luZyBpbiB0dXJuIGFnYWluc3QgdGhhdFxuIFx0ICogYWxsb2NhdGlvbi5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSBnbG9iYWwgZnMgc2l6ZSBmaWVsZHMgKi9cbi1cdHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCAmIzQzOz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4mIzQzO1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICYjNDM7IGZsZXhfZ2QtXHUwMDNlY291bnQpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuJiM0MztcdFx0XHQgIG1pbihzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4mIzQzO1x0XHRcdCAgICAgIChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSkpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSByZXNlcnZlZCBibG9jayBjb3VudHMgb25seSBvbmNlIHRoZSBuZXcgZ3JvdXAgaXNcbiBcdCAqIGFjdGl2ZS4gKi9cbmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmNcbmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0XG4tLS0gYS9mcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGUuY1xuQEAgLTI3Myw4ICYjNDM7MjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyAmIzQzOzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXG4gXHQvKiBBbGwgZ29vZCwgc28gd2UgdHJ5ICovXG4gXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xuIFx0ZXJyb3IgPSBleHBhbmRfZmR0YWJsZShmaWxlcywgbnIpO1xuLVx0ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7XG4mIzQzO1x0LyogY291cGxlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgJiM0Mzs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJjdV9yZWFkX2xvY2tfc2NoZWQoKTtcbi1cdGlmICh1bmxpa2VseShmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSB7XG4mIzQzO1x0LyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCAmIzQzOzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFxuIFx0YXR0ciA9IFJFQURfT05DRShwaWQtXHUwMDNlYXR0cik7XG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbi1cdFx0XHRzbXBfcm1iKCk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbiBcdFx0XHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUFNcbiBcdFx0XHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXHUwMDNlY2dyb3VwaWQ7XG5AQCAtNDA1LDggJiM0Mzs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFO1xuIFx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cdTAwM2Vjb3JlZHVtcF9zaWduYWw7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjU4NjBkYWVhNmQ0MDUgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMjY3LDEyICYjNDM7MjY3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0ICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmdcbiBcdCAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXRcbiBcdCAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrXG4tXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzXG4tXHQgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuXG4mIzQzO1x0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBhY3F1aXJlIGlzIG1hdGNoZWRcbiYjNDM7XHQgKiB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHN1cGVyX3dha2UoKSBhcyB3ZSBkb24mIzM5O3QgaG9sZCBsb2NrcyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9CT1JOKSlcbiYjNDM7XHRpZiAoIShzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpIFx1MDAyNiBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgJiM0MzszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb1xuIFxuIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxuIHtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSAmIzQzOzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50XG4gXG4gdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSAmIzQzOzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwcG9zLFxuIFx0XHQgICAgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwKVxuIHtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSAmIzQzOzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHQgKiBkZXNpcmVkIGJlaGF2aW9yIGlzIHRvIHNlZSB0aGUgdmFsdWVzIG9mIHRoZSBleHRlbnRzIHRoYXRcbiBcdCAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLlxuIFx0ICpcbi1cdCAqIFRvIGFjaGlldmUgdGhpcyBzbXBfd21iKCkgaXMgdXNlZCBvbiBndWFyYW50ZWUgdGhlIHdyaXRlXG4tXHQgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBjcmF6eVxuLVx0ICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS5cbiYjNDM7XHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuJiM0MztcdCAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50XG4mIzQzO1x0ICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZVxuJiM0MztcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbiYjNDM7XHQgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuXG4gXHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2dXNlcm5zX3N0YXRlX211dGV4KTtcbiBcbkBAIC0xMDk4LDggJiM0MzsxMTAwLDggQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRtYXAtXHUwMDNlZm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDtcbiBcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7XG4gXHR9XG4tXHRzbXBfd21iKCk7XG4tXHRtYXAtXHUwMDNlbnJfZXh0ZW50cyA9IG5ld19tYXAubnJfZXh0ZW50cztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTtcbiBcbiBcdCpwcG9zID0gY291bnQ7XG4gXHRyZXQgPSBjb3VudDtcbmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jXG5pbmRleCBlMjg1ZThiYzQ3MTJhLi5kNmYyMzVlMTQzYjcyIDEwMDY0NFxuLS0tIGEvbGliL3ZzcHJpbnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi92c3ByaW50Zi5jXG5AQCAtNzYyLDkgJiM0Mzs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZFxuIHtcbiBcdGdldF9yYW5kb21fYnl0ZXMoXHUwMDI2cHRyX2tleSwgc2l6ZW9mKHB0cl9rZXkpKTtcbiBcbi1cdC8qIFBhaXJzIHdpdGggc21wX3JtYigpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXG4tXHRzbXBfd21iKCk7XG4tXHRXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuIFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIH1cbiBcbkBAIC03ODEsMTIgJiM0Mzs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaGFzaHZhbDtcbiBcbi1cdGlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2ZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbi1cdHNtcF9ybWIoKTtcbi1cbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gXHRoYXNodmFsID0gKHVuc2lnbmVkIGxvbmcpc2lwaGFzaF8xdTY0KCh1NjQpcHRyLCBcdTAwMjZwdHJfa2V5KTtcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmNcbmluZGV4IDJkMmVmYjg3Nzk3NWQuLmUzNGFkYTBjY2VhY2YgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jXG5AQCAtNzAsMTAgJiM0Mzs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4mIzQzO1x0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdLCBhcnJheSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmhcbmluZGV4IGM0MWNhYWY5NDA5NWYuLjZkYjcxNzJiZGFhY2MgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5oXG5AQCAtNTYsMTEgJiM0Mzs1Niw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cbiYjNDM7XHRhcnJheSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxuJiM0MztcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbiBcdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xuaW5kZXggMTU1NTMwYWVkY2UyZS4uMTFiNjUzYmE3YzEwOSAxMDA2NDRcbi0tLSBhL25ldC9jYW4vaXNvdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9pc290cC5jXG5AQCAtMTE1Niw4ICYjNDM7MTE1Niw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0bXlfZ2VuID0gaXNvdHBfaW5jX3R4X2dlbihSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSk7XG4gXHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovXG4gXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcbi1cdHNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi9cbi1cdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1NFTkRJTkcpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbiBcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXG5pbmRleCAyOTk0OGNiNDRiN2QxLi42ZDNjNTExZDFkZWY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuQEAgLTEyNSw5ICYjNDM7MTI1LDggQEAgc3RhdGljIHZvaWQgX19yZXVzZXBvcnRfYWRkX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG4ge1xuIFx0cmV1c2UtXHUwMDNlc29ja3NbcmV1c2UtXHUwMDNlbnVtX3NvY2tzXSA9IHNrO1xuLVx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xuLVx0c21wX3dtYigpO1xuLVx0cmV1c2UtXHUwMDNlbnVtX3NvY2tzJiM0MzsmIzQzOztcbiYjNDM7XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmV1c2UtXHUwMDNlbnVtX3NvY2tzLCByZXVzZS1cdTAwM2VudW1fc29ja3MgJiM0MzsgMSk7XG4gXHRyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpO1xuIH1cbiBcbkBAIC0xNDAsNyAmIzQzOzEzOSw4IEBAIHN0YXRpYyBib29sIF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cmV1c2UtXHUwMDNlc29ja3NbaV0gPSByZXVzZS1cdTAwM2Vzb2Nrc1tyZXVzZS1cdTAwM2VudW1fc29ja3MgLSAxXTtcbi1cdHJldXNlLVx1MDAzZW51bV9zb2Nrcy0tO1xuJiM0MztcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MsIHJldXNlLVx1MDAzZW51bV9zb2NrcyAtIDEpO1xuIFx0cmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU4MywxMSAmIzQzOzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4tXHRzb2NrcyA9IFJFQURfT05DRShyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuJiM0MztcdC8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqL1xuJiM0MztcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuIFx0aWYgKGxpa2VseShzb2NrcykpIHtcbi1cdFx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdFx0c21wX3JtYigpO1xuLVxuIFx0XHRpZiAoIXByb2cgfHwgIXNrYilcbiBcdFx0XHRnb3RvIHNlbGVjdF9ieV9oYXNoO1xuIFxuQEAgLTYzNCwxMyAmIzQzOzYzMiwxMSBAQCBzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X21pZ3JhdGVfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAoIXJldXNlKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4mIzQzO1x0LyogcGFpcmVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4mIzQzO1x0c29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2tzKSlcbiBcdFx0Z290byBmYWlsdXJlO1xuIFxuLVx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGhhc2ggPSBtaWdyYXRpbmdfc2stXHUwMDNlc2tfaGFzaDtcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4gXHRpZiAoIXByb2cgfHwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfU0tfUkVVU0VQT1JUX1NFTEVDVF9PUl9NSUdSQVRFKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuaW5kZXggNTY1ODYwY2NjYmE2ZC4uZDRmMzlmOThlMmNmMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuQEAgLTI1LDcgJiM0MzsyNSw2IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2FjdF9vcHM7XG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KVxuIHtcbi1cdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiBcdGlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LVx1MDAzZXRjZmdfcHZhbCkpXG4gXHRcdHJldHVybiBnYWN0LVx1MDAzZXRjZl9hY3Rpb247XG4gXHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZnX3BhY3Rpb247XG5AQCAtMzUsNyAmIzQzOzM0LDYgQEAgc3RhdGljIGludCBnYWN0X2RldGVybShzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpXG4ge1xuIFx0dTMyIHBhY2sgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZnYWN0LVx1MDAzZXBhY2tldHMpO1xuIFxuLVx0c21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqL1xuIFx0aWYgKHBhY2sgJSBnYWN0LVx1MDAzZXRjZmdfcHZhbClcbiBcdFx0cmV0dXJuIGdhY3QtXHUwMDNldGNmX2FjdGlvbjtcbiBcdHJldHVybiBnYWN0LVx1MDAzZXRjZmdfcGFjdGlvbjtcbkBAIC0xMzMsMTEgJiM0MzsxMzEsOCBAQCBzdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRpZiAocF9wYXJtKSB7XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wYWN0aW9uID0gcF9wYXJtLVx1MDAzZXBhY3Rpb247XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tXHUwMDNlcHZhbCk7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0Y2ZnX3B2YWwgaXMgd3JpdHRlbiBiZWZvcmUgdGNmZ19wdHlwZVxuLVx0XHQgKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGdhY3RfbmV0X3JhbmQoKSBcdTAwMjYgZ2FjdF9kZXRlcm0oKVxuLVx0XHQgKi9cbi1cdFx0c21wX3dtYigpO1xuLVx0XHRnYWN0LVx1MDAzZXRjZmdfcHR5cGUgICA9IHBfcGFybS1cdTAwM2VwdHlwZTtcbiYjNDM7XHRcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHRjZl9nYWN0X2FjdCgpLiAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlLCBwX3Bhcm0tXHUwMDNlcHR5cGUpO1xuIFx0fVxuICNlbmRpZlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG5AQCAtMTYwLDcgJiM0MzsxNTUsOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBcdHtcbi1cdHUzMiBwdHlwZSA9IFJFQURfT05DRShnYWN0LVx1MDAzZXRjZmdfcHR5cGUpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiYjNDM7XHR1MzIgcHR5cGUgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmdhY3QtXHUwMDNldGNmZ19wdHlwZSk7XG4gXG4gXHRpZiAocHR5cGUpXG4gXHRcdGFjdGlvbiA9IGdhY3RfcmFuZFtwdHlwZV0oZ2FjdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FDVCYjMzQ7LAogICAgJiMzNDtHQUNUX1BST0ImIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtwaWRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcm9jX3VpZF9tYXBfd3JpdGUmIzM0OywKICAgICYjMzQ7aXNvdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAgICYjMzQ7c3lzX2lvX2dldGV2ZW50cyYjMzQ7LAogICAgJiMzNDtyZXVzZXBvcnRfc2VsZWN0X3NvY2smIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7dmZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1vcnkgYmFycmllcnMgYWNyb3NzIG11bHRpcGxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGZzLCBuZXQsIGtlcm5lbCwgbGliKSBieSByZXBsYWNpbmcgcGxhaW4gcmVhZHMvd3JpdGVzIGFuZCBzbXBfcm1iL3dtYiB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgY29uY3VycmVuY3kgc2VtYW50aWNzLCBmaXhpbmcgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGltcHJvdmluZyBjb3JyZWN0bmVzcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGxvZ2ljLCBpbmNsdWRpbmcgZXh0NCByZXNpemluZywgQUlPIGV2ZW50IHJlYWRpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIENBTiBJU09UUCBtZXNzYWdlIHNlbmRpbmcsIGFuZCBTT19SRVVTRVBPUlQgc29ja2V0IHNlbGVjdGlvbi4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjgwODdkYTNlYTQ1OGFiYTBiNGUxZDEyNTI5ZDBiZDdiNDA1ZWM0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEwOjM2OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBkNzhhY2M2OWY0ODcwLi40NDEzYzgyNjg4Y2M4IDEwMDY0NAotLS0gYS9mcy9haW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uYwpAQCAtMTIwNiwxMyAmIzQzOzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpCiAJLyogYWZ0ZXIgZmxhZ2dpbmcgdGhlIHJlcXVlc3QgYXMgZG9uZSwgd2UKIAkgKiBtdXN0IG5ldmVyIGV2ZW4gbG9vayBhdCBpdCBhZ2FpbgogCSAqLwotCXNtcF93bWIoKTsJLyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCi0KLQljdHgtJmd0O3RhaWwgPSB0YWlsOwomIzQzOwlXUklURV9PTkNFKGN0eC0mZ3Q7dGFpbCwgdGFpbCk7CiAKIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQlyaW5nLSZndDt0YWlsID0gdGFpbDsKJiM0MzsJLyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmluZy0mZ3Q7dGFpbCwgdGFpbCk7CiAJZmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC0mZ3Q7cmluZ19mb2xpb3NbMF0pOwogCiAJY3R4LSZndDtjb21wbGV0ZWRfZXZlbnRzJiM0MzsmIzQzOzsKQEAgLTEyODgsMTMgJiM0MzsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwKIAkvKiBBY2Nlc3MgdG8gLSZndDtyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtJmd0O3JpbmdfbG9jay4gKi8KIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQl0YWlsID0gcmluZy0mZ3Q7dGFpbDsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgb25jZSB3ZSYjMzk7dmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXQKIAkgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuCiYjNDM7CSAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS4KIAkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CXRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmluZy0mZ3Q7dGFpbCk7CiAKIAlwcl9kZWJ1ZygmIzM0O2gldSB0JXUgbSV1XG4mIzM0OywgaGVhZCwgdGFpbCwgY3R4LSZndDtucl9ldmVudHMpOwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0zNTQyLDE2ICYjNDM7MzU0MiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pc2l6ZV9zZXQoc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgbG9mZl90IGlfc2l6ZSkKIH0KIAogLyoKLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWUKLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKCkKLSAqIGluIHJlc2l6ZS5jCiYjNDM7ICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLgogICovCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlleHQ0X2dyb3VwX3QJbmdyb3VwcyA9IEVYVDRfU0Ioc2IpLSZndDtzX2dyb3Vwc19jb3VudDsKLQotCXNtcF9ybWIoKTsKLQlyZXR1cm4gbmdyb3VwczsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtODk5LDEwICYjNDM7ODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgKIAogCS8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi8KIAlpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy0mZ3Q7YWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKQotCQluZ3JvdXBzID0gRVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHM7Ci0KLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCi0Jc21wX3JtYigpOwomIzQzOwkJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJCW5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMpOwogCiAJcmV0dXJuIG5ncm91cHM7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTE0NjIsMTEgJiM0MzsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICoKIAkgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOgogCSAqCi0JICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGwKLQkgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogKiBXcml0ZXJzIG11c3QgdXNlIGEgcmVsZWFzZSBzdG9yZSB3aGVuIHVwZGF0aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZAogCSAqCi0JICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzCi0JICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgomIzQzOwkgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzCiYjNDM7CSAqICAgY291bnQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgogCSAqCiAJICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50CiAJICogd2hpbGUgZnJlZWluZyBkYXRhLCBhcyB3ZSBjYW4gb25seSBhbGxvY2F0ZSBmcm9tIGEgYmxvY2sKQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXQKIAkgKiBhbGxvY2F0aW9uLgogCSAqLwotCXNtcF93bWIoKTsKIAogCS8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovCi0Jc2JpLSZndDtzX2dyb3Vwc19jb3VudCAmIzQzOz0gZmxleF9nZC0mZ3Q7Y291bnQ7Ci0Jc2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKLQkJCShFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGV4dDRfZ2V0X2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgIHNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0MzsgZmxleF9nZC0mZ3Q7Y291bnQpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMsCiYjNDM7CQkJICBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTsKIAogCS8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzCiAJICogYWN0aXZlLiAqLwpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9maWxlLmMKQEAgLTI3Myw4ICYjNDM7MjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCXJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy0mZ3Q7ZmR0LCBuZXdfZmR0KTsKIAlpZiAoY3VyX2ZkdCAhPSAmYW1wO2ZpbGVzLSZndDtmZHRhYikKIAkJY2FsbF9yY3UoJmFtcDtjdXJfZmR0LSZndDtyY3UsIGZyZWVfZmR0YWJsZV9yY3UpOwotCS8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovCi0Jc21wX3dtYigpOwogCXJldHVybiAwOwogfQogCkBAIC0zMTMsNyAmIzQzOzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpCiAJLyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqLwogCWZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCWVycm9yID0gZXhwYW5kX2ZkdGFibGUoZmlsZXMsIG5yKTsKLQlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7CiYjNDM7CS8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcywgZmFsc2UpOwogCiAJd2FrZV91cF9hbGwoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX3dhaXQpOwogCXJldHVybiBlcnJvcjsKQEAgLTY4NSwxMyAmIzQzOzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJcmV0dXJuOwogCiAJcmN1X3JlYWRfbG9ja19zY2hlZCgpOwotCWlmICh1bmxpa2VseShmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkgewomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqLwomIzQzOwlpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MpKSkgewogCQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKIAkJZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7CiAJCXJldHVybjsKIAl9Ci0JLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiBleHBhbmRfZmR0YWJsZSgpICovCi0Jc21wX3JtYigpOwogCWZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy0mZ3Q7ZmR0KTsKIAlWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSkgIT0gTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGZkdC0mZ3Q7ZmRbZmRdLCBmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL3BpZGZzLmMgYi9mcy9waWRmcy5jCmluZGV4IGE2YTY0M2YxNWQwOGEuLjJjZDBmYWI3MzE4MGUgMTAwNjQ0Ci0tLSBhL2ZzL3BpZGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcGlkZnMuYwpAQCAtMzkzLDggJiM0MzszOTMsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAogCWF0dHIgPSBSRUFEX09OQ0UocGlkLSZndDthdHRyKTsKIAlpZiAobWFzayAmYW1wOyBQSURGRF9JTkZPX0VYSVQpIHsKLQkJaWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewotCQkJc21wX3JtYigpOwomIzQzOwkJaWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7CiAJCQlraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDsKICNpZmRlZiBDT05GSUdfQ0dST1VQUwogCQkJa2luZm8uY2dyb3VwaWQgPSBhdHRyLSZndDtjZ3JvdXBpZDsKQEAgLTQwNSw4ICYjNDM7NDA0LDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJfQogCiAJaWYgKG1hc2sgJmFtcDsgUElERkRfSU5GT19DT1JFRFVNUCkgewotCQlpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewotCQkJc21wX3JtYigpOwomIzQzOwkJaWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewogCQkJa2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7CiAJCQlraW5mby5jb3JlZHVtcF9tYXNrID0gYXR0ci0mZ3Q7Y29yZWR1bXBfbWFzazsKIAkJCWtpbmZvLmNvcmVkdW1wX3NpZ25hbCA9IGF0dHItJmd0O2NvcmVkdW1wX3NpZ25hbDsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjU4NjBkYWVhNmQ0MDUgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMjY3LDEyICYjNDM7MjY3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAogCSAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nCiAJICogZmlsZXN5c3RlbSBtaWdodCBiZSBpbiBhIHN0YXRlIG9mIHBhcnRpYWwgY29uc3RydWN0aW9uIGFuZCBoZW5jZSBpdAogCSAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrCi0JICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpcwotCSAqIG1hdGNoZWQgd2l0aCB0aGUgb25lIGluIG1vdW50X2ZzKCkgYXMgd2UgZG9uJiMzOTt0IGhvbGQgbG9ja3MgaGVyZS4KJiM0MzsJICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBhY3F1aXJlIGlzIG1hdGNoZWQKJiM0MzsJICogd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYXMgd2UgZG9uJiMzOTt0IGhvbGQgbG9ja3MgaGVyZS4KIAkgKi8KLQlpZiAoIShzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9CT1JOKSkKJiM0MzsJaWYgKCEoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3NiLSZndDtzX2ZsYWdzKSAmYW1wOyBTQl9CT1JOKSkKIAkJcmV0dXJuIDA7Ci0Jc21wX3JtYigpOwogCiAJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzICZhbXA7JmFtcDsKIAkgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCkBAIC0zMTcsOSAmIzQzOzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvCiAKIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTM4Myw5ICYjNDM7MzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQKIAogdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChleHRlbnRzICZsdDs9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpCiAJCWV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTY3Niw5ICYjNDM7Njc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcywKIAkJICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCWxvZmZfdCBwb3MgPSAqcHBvczsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChwb3MgJmd0Oz0gZXh0ZW50cykKIAkJcmV0dXJuIE5VTEw7CkBAIC05NjcsOSAmIzQzOzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0CiAJICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuCiAJICoKLQkgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZQotCSAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGNyYXp5Ci0JICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS4KJiM0MzsJICogVGhlIG5yX2V4dGVudHMgZmllbGQgaXMgdGhlIHB1Ymxpc2ggcG9pbnQgZm9yIHRoZSBleHRlbnQKJiM0MzsJICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnQKJiM0MzsJICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZQomIzQzOwkgKiBzbXBfbG9hZF9hY3F1aXJlKCkgdG8gZW5zdXJlIHRoZXkgc2VlIGEgY29uc2lzdGVudCB2aWV3IG9mCiYjNDM7CSAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy4KIAkgKi8KIAltdXRleF9sb2NrKCZhbXA7dXNlcm5zX3N0YXRlX211dGV4KTsKIApAQCAtMTA5OCw4ICYjNDM7MTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJbWFwLSZndDtmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkOwogCQltYXAtJmd0O3JldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7CiAJfQotCXNtcF93bWIoKTsKLQltYXAtJmd0O25yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTsKIAogCSpwcG9zID0gY291bnQ7CiAJcmV0ID0gY291bnQ7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGUyODVlOGJjNDcxMmEuLmQ2ZjIzNWUxNDNiNzIgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi92c3ByaW50Zi5jCkBAIC03NjIsOSAmIzQzOzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkCiB7CiAJZ2V0X3JhbmRvbV9ieXRlcygmYW1wO3B0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwotCXNtcF93bWIoKTsKLQlXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTc4MSwxMiAmIzQzOzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBoYXNodmFsOwogCi0JaWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCS8qIFBhaXJzIHdpdGggc21wX3dtYigpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KLQlzbXBfcm1iKCk7Ci0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAloYXNodmFsID0gKHVuc2lnbmVkIGxvbmcpc2lwaGFzaF8xdTY0KCh1NjQpcHRyLCAmYW1wO3B0cl9rZXkpOwogCS8qCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCAyZDJlZmI4Nzc5NzVkLi5lMzRhZGEwY2NlYWNmIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTcwLDEwICYjNDM7NzAsOCBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIAlpZiAoYXJyYXkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JLyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi8KLQlzbXBfd21iKCk7Ci0KLQl2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSA9IGFycmF5OwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdLCBhcnJheSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oCmluZGV4IGM0MWNhYWY5NDA5NWYuLjZkYjcxNzJiZGFhY2MgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uaApAQCAtNTYsMTEgJiM0Mzs1Niw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5OwogCi0JYXJyYXkgPSB2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQotCQkJCSAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOwotCi0JLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovCiYjNDM7CWFycmF5ID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCiYjNDM7CQkJCSBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTsKIAogCXJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmMKaW5kZXggMTU1NTMwYWVkY2UyZS4uMTFiNjUzYmE3YzEwOSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9pc290cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuYwpAQCAtMTE1Niw4ICYjNDM7MTE1Niw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCW15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pKTsKIAlpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovCiAJV1JJVEVfT05DRShzby0mZ3Q7dHhfZ2VuLCBteV9nZW4pOwotCXNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi8KLQlXUklURV9PTkNFKHNvLSZndDt0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NvLSZndDt0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7CiAJV1JJVEVfT05DRShzby0mZ3Q7Y2ZlY2hvLCAwKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYyBiL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMKaW5kZXggMjk5NDhjYjQ0YjdkMS4uNmQzYzUxMWQxZGVmOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jCkBAIC0xMjUsOSAmIzQzOzEyNSw4IEBAIHN0YXRpYyB2b2lkIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSkKIHsKIAlyZXVzZS0mZ3Q7c29ja3NbcmV1c2UtJmd0O251bV9zb2Nrc10gPSBzazsKLQkvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovCi0Jc21wX3dtYigpOwotCXJldXNlLSZndDtudW1fc29ja3MmIzQzOyYjNDM7OwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmV1c2UtJmd0O251bV9zb2NrcywgcmV1c2UtJmd0O251bV9zb2NrcyAmIzQzOyAxKTsKIAlyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpOwogfQogCkBAIC0xNDAsNyAmIzQzOzEzOSw4IEBAIHN0YXRpYyBib29sIF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV1c2UtJmd0O3NvY2tzW2ldID0gcmV1c2UtJmd0O3NvY2tzW3JldXNlLSZndDtudW1fc29ja3MgLSAxXTsKLQlyZXVzZS0mZ3Q7bnVtX3NvY2tzLS07CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtyZXVzZS0mZ3Q7bnVtX3NvY2tzLCByZXVzZS0mZ3Q7bnVtX3NvY2tzIC0gMSk7CiAJcmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNTgzLDExICYjNDM7NTgzLDkgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJCWdvdG8gb3V0OwogCiAJcHJvZyA9IHJjdV9kZXJlZmVyZW5jZShyZXVzZS0mZ3Q7cHJvZyk7Ci0Jc29ja3MgPSBSRUFEX09OQ0UocmV1c2UtJmd0O251bV9zb2Nrcyk7CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqLwomIzQzOwlzb2NrcyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtyZXVzZS0mZ3Q7bnVtX3NvY2tzKTsKIAlpZiAobGlrZWx5KHNvY2tzKSkgewotCQkvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqLwotCQlzbXBfcm1iKCk7Ci0KIAkJaWYgKCFwcm9nIHx8ICFza2IpCiAJCQlnb3RvIHNlbGVjdF9ieV9oYXNoOwogCkBAIC02MzQsMTMgJiM0Mzs2MzIsMTEgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9taWdyYXRlX3NvY2soc3RydWN0IHNvY2sgKnNrLAogCWlmICghcmV1c2UpCiAJCWdvdG8gb3V0OwogCi0Jc29ja3MgPSBSRUFEX09OQ0UocmV1c2UtJmd0O251bV9zb2Nrcyk7CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqLwomIzQzOwlzb2NrcyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtyZXVzZS0mZ3Q7bnVtX3NvY2tzKTsKIAlpZiAodW5saWtlbHkoIXNvY2tzKSkKIAkJZ290byBmYWlsdXJlOwogCi0JLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KLQlzbXBfcm1iKCk7Ci0KIAloYXNoID0gbWlncmF0aW5nX3NrLSZndDtza19oYXNoOwogCXByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtJmd0O3Byb2cpOwogCWlmICghcHJvZyB8fCBwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfU0tfUkVVU0VQT1JUX1NFTEVDVF9PUl9NSUdSQVRFKSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhY3QuYyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jCmluZGV4IDU2NTg2MGNjY2JhNmQuLmQ0ZjM5Zjk4ZTJjZjAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jCkBAIC0yNSw3ICYjNDM7MjUsNiBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhY3Rfb3BzOwogI2lmZGVmIENPTkZJR19HQUNUX1BST0IKIHN0YXRpYyBpbnQgZ2FjdF9uZXRfcmFuZChzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpCiB7Ci0Jc21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqLwogCWlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LSZndDt0Y2ZnX3B2YWwpKQogCQlyZXR1cm4gZ2FjdC0mZ3Q7dGNmX2FjdGlvbjsKIAlyZXR1cm4gZ2FjdC0mZ3Q7dGNmZ19wYWN0aW9uOwpAQCAtMzUsNyAmIzQzOzM0LDYgQEAgc3RhdGljIGludCBnYWN0X2RldGVybShzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpCiB7CiAJdTMyIHBhY2sgPSBhdG9taWNfaW5jX3JldHVybigmYW1wO2dhY3QtJmd0O3BhY2tldHMpOwogCi0Jc21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqLwogCWlmIChwYWNrICUgZ2FjdC0mZ3Q7dGNmZ19wdmFsKQogCQlyZXR1cm4gZ2FjdC0mZ3Q7dGNmX2FjdGlvbjsKIAlyZXR1cm4gZ2FjdC0mZ3Q7dGNmZ19wYWN0aW9uOwpAQCAtMTMzLDExICYjNDM7MTMxLDggQEAgc3RhdGljIGludCB0Y2ZfZ2FjdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLAogCWlmIChwX3Bhcm0pIHsKIAkJZ2FjdC0mZ3Q7dGNmZ19wYWN0aW9uID0gcF9wYXJtLSZndDtwYWN0aW9uOwogCQlnYWN0LSZndDt0Y2ZnX3B2YWwgICAgPSBtYXhfdCh1MTYsIDEsIHBfcGFybS0mZ3Q7cHZhbCk7Ci0JCS8qIE1ha2Ugc3VyZSB0Y2ZnX3B2YWwgaXMgd3JpdHRlbiBiZWZvcmUgdGNmZ19wdHlwZQotCQkgKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGdhY3RfbmV0X3JhbmQoKSAmYW1wOyBnYWN0X2RldGVybSgpCi0JCSAqLwotCQlzbXBfd21iKCk7Ci0JCWdhY3QtJmd0O3RjZmdfcHR5cGUgICA9IHBfcGFybS0mZ3Q7cHR5cGU7CiYjNDM7CQkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7Z2FjdC0mZ3Q7dGNmZ19wdHlwZSwgcF9wYXJtLSZndDtwdHlwZSk7CiAJfQogI2VuZGlmCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtnYWN0LSZndDt0Y2ZfbG9jayk7CkBAIC0xNjAsNyAmIzQzOzE1NSw4IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfZ2FjdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogI2lmZGVmIENPTkZJR19HQUNUX1BST0IKIAl7Ci0JdTMyIHB0eXBlID0gUkVBRF9PTkNFKGdhY3QtJmd0O3RjZmdfcHR5cGUpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdGNmX2dhY3RfaW5pdCgpICovCiYjNDM7CXUzMiBwdHlwZSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtnYWN0LSZndDt0Y2ZnX3B0eXBlKTsKIAogCWlmIChwdHlwZSkKIAkJYWN0aW9uID0gZ2FjdF9yYW5kW3B0eXBlXShnYWN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IEJhcnJpZXIgUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHN3YXBwaW5nIG91dCBpbnN0YW5jZXMgb2YgYHNtcF93bWIoKWAgJiM0MzsgYFdSSVRFX09OQ0UoKWAgYW5kIGBSRUFEX09OQ0UoKWAgJiM0MzsgYHNtcF9ybWIoKWAgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2UoKWAgYW5kIGBzbXBfbG9hZF9hY3F1aXJlKClgIGFjcm9zcyBhIGJ1bmNoIG9mIGtlcm5lbCBzdWJzeXN0ZW1zLiBGaXJzdCB0aG91Z2h0OiB0aGlzIGxvb2tzIGxpa2UgYSBtZW1vcnkgYmFycmllciByZWZhY3RvcmluZy4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgZnVuY3Rpb25hbGx5LCBkb2VzIHRoaXMgYWN0dWFsbHkgKmNoYW5nZSogYW55dGhpbmc/IE1lbW9yeSBvcmRlcmluZyBzZW1hbnRpY3MgYXJlIGVzc2VudGlhbGx5IHByZXNlcnZlZCwgYnV0IGFjcXVpcmUvcmVsZWFzZSBpcyBjbGVhbmVyIGFuZCBjYW4gYmUgbW9yZSBlZmZpY2llbnQgb3IgY29ycmVjdCBvbiBzb21lIGFyY2hpdGVjdHVyZXMsIGFuZCBpdCBhcHBlYXJzIHRoZXJlJiMzOTtzIGFuIGFjdHVhbCBidWdmaXggaW4gdGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmN1cnJlbmN5IGZpeCB0aGF0IGFkZHJlc3NlcyBwb3RlbnRpYWwgZGF0YSByYWNlcy4KCk5vdywgZG9lcyB0aGlzIG1lcml0IGZ1enppbmc/IEl0IGRlZmluaXRlbHkgY2hhbmdlcyBzb21lIGNvcmUga2VybmVsIGxvZ2ljIOKAkyBgZnMvYWlvYCwgYGV4dDRgLCBgZmlsZWAsIGBwaWRmc2AsIGBzdXBlcmAsIGB1c2VyX25hbWVzcGFjZWAsIGB2c3ByaW50ZmAsIGB2bGFuYCwgYGNhbmAsIGBzb2NrX3JldXNlcG9ydGAsIGFuZCBgYWN0X2dhY3RgLiBBbmQgaXQmIzM5O3MgYWx0ZXJpbmcgaG93IG1lbW9yeSBpcyBhY2Nlc3NlZDsgY2hhbmdpbmcgcGxhaW4gcmVhZHMvd3JpdGVzIHRvIGFjcXVpcmUvcmVsZWFzZSB3aGljaCBjaGFuZ2VzIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgYW5kIG1lbW9yeSBvcmRlcmluZyBzZW1hbnRpY3MuIFRoZSBwYXRjaCBpcywgaW4gZWZmZWN0LCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBHaXZlbiB0aGUgcHJvbXB0IGNyaXRlcmlhLCBpdCYjMzk7cyBub3QgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBhIGNvbnN0YW50IGNoYW5nZSwgdW5yZWFjaGFibGUgY29kZSwgb3IgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLgoKU28sIHllcywgaXTigJlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZCBhbmQgY291bGQgYmUgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgYWlvX2NvbXBsZXRlYCwgYGFpb19yZWFkX2V2ZW50c19yaW5nYCwgYGV4dDRfZ2V0X2dyb3Vwc19jb3VudGAsIGBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudGAsIGBleHQ0X3VwZGF0ZV9zdXBlcmAsIGBleHBhbmRfZmR0YWJsZWAsIGBleHBhbmRfZmlsZXNgLCBgZmRfaW5zdGFsbGAsIGBwaWRmZF9pbmZvYCwgYHN1cGVyX2NhY2hlX2NvdW50YCwgYG1hcF9pZF9yYW5nZV9kb3duYCwgYG1hcF9pZF9yYW5nZV91cGAsIGBtX3N0YXJ0YCwgYG1hcF93cml0ZWAsIGBmaWxsX3B0cl9rZXlgLCBgX19wdHJfdG9faGFzaHZhbGAsIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAsIGBpc290cF9zZW5kbXNnYCwgYF9fcmV1c2Vwb3J0X2FkZF9zb2NrYCwgYF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrYCwgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AsIGByZXVzZXBvcnRfbWlncmF0ZV9zb2NrYCwgYGdhY3RfbmV0X3JhbmRgLCBgZ2FjdF9kZXRlcm1gLCBgdGNmX2dhY3RfaW5pdGAsIGFuZCBgdGNmX2dhY3RfYWN0YC4KCkkgd2FudCB0byBwaWNrIHNvbWUgcmVhc29uYWJseSBub24taG90LXBhdGggQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzLiBgYWlvX2NvbXBsZXRlYCBhbmQgYGFpb19yZWFkX2V2ZW50c19yaW5nYCBhcmUgcHJldHR5IGhvdC1wYXRoLCBzbyB0aGF0JiMzOTtzIG91dC4gIGBleHQ0X3VwZGF0ZV9zdXBlcmAgZ2V0cyBjYWxsZWQgZHVyaW5nIHJlc2l6ZSwgdGhhdCYjMzk7cyBub3QgdG9vIGJhZC4gYGV4cGFuZF9maWxlc2Agd2hlbiBvcGVuaW5nIGZpbGVzLCBkZWNlbnQuICBgcGlkZmRfaW5mb2AgZm9yIFBJREZEIGlvY3RscywgdGhhdCBzb3VuZHMgZ29vZC4gIGBtYXBfd3JpdGVgIGZvciBgL3Byb2Mvc2VsZi91aWRfbWFwYCB3cml0ZXMsIHRoYXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZS4gYGlzb3RwX3NlbmRtc2dgIGZvciBzZW5kaW5nIENBTiBJU09UUCBtZXNzYWdlcywgYWxzbyBsb29rcyBnb29kLiBBbmQsIGB0Y2ZfZ2FjdF9pbml0YCB3aGVuIGNvbmZpZ3VyaW5nIHRjIGdhY3QsIHRoYXQmIzM5O3Mgbm90IGJhZC4KClNvIEkmIzM5O3ZlIHBpY2tlZCBhIGZldyBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBmdXp6ZWQ6Ci0gYGV4dDRfdXBkYXRlX3N1cGVyYAotIGBwaWRmZF9pbmZvYAotIGBtYXBfd3JpdGVgCi0gYGlzb3RwX3NlbmRtc2dgCi0gYHRjZl9nYWN0X2luaXRgCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqZXh0NF91cGRhdGVfc3VwZXJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9yZXNpemUuYz0xNDAwPXN0YXRpYyB2b2lkIGV4dDRfYWRkX292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xNDE3LSAqL1xuZnMvZXh0NC9yZXNpemUuYzoxNDE4OnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTktXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9uZXdfZmxleF9ncm91cF9kYXRhICpmbGV4X2dkKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz03MD1zdGF0aWMgaW50IGV4dDRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbmZzL2V4dDQvc3VwZXIuYzo3MTpzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYy03Mi1zdGF0aWMgaW50IGV4dDRfY29tbWl0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz02MTE2PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjI0OS0vKiBDb3B5IHN0YXRlIG9mIEVYVDRfU0Ioc2IpIGludG8gYnVmZmVyIGZvciBvbi1kaXNrIHN1cGVyYmxvY2sgKi9cbmZzL2V4dDQvc3VwZXIuYzo2MjUwOnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNjI1MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBFeHQ0IFN1cGVyYmxvY2sgVXBkYXRlcyBpbiBSZXNpemUgT3BlcmF0aW9ucyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgdGhlIGBleHQ0X3VwZGF0ZV9zdXBlcmAgZnVuY3Rpb24gd2l0aGluIGBmcy9leHQ0L3Jlc2l6ZS5jYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGF0IGNvbXBpbGF0aW9uIHVuaXQsIG1ha2luZyBpdCB1bmxpa2VseSB0byBiZSBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuCgpOb3csIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0ICphcmUqIGxpa2VseSBlbnRyeSBwb2ludHMgaW50byB0aGUgcmVzaXplIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN1cGVyYmxvY2sgdXBkYXRlIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgd2hhdCBicm9hZGVyIGNvbnRleHQgd2l0aGluIHRoZSByZXNpemUgcHJvY2VzcyBpdCYjMzk7cyBpbnZvbHZlZCBpbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhbmRsZSB1c2VyIHJlcXVlc3RzLCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLCBvciB0aG9zZSB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgdmlhIFZGUyBjYWxscy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcmVzaXppbmcgb3BlcmF0aW9uIHByb2JhYmx5IGxpZXMsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBgZXh0NF91cGRhdGVfc3VwZXJgIGZpdHMgaW50byB0aGF0IG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3VwZGF0ZV9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvcmVzaXplLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9yZXNpemUuYz0xNDAwPXN0YXRpYyB2b2lkIGV4dDRfYWRkX292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xNDExLS8qXG5mcy9leHQ0L3Jlc2l6ZS5jOjE0MTI6ICogZXh0NF91cGRhdGVfc3VwZXIoKSB1cGRhdGVzIHRoZSBzdXBlciBibG9jayBzbyB0aGF0IHRoZSBuZXdseSBhZGRlZFxuZnMvZXh0NC9yZXNpemUuYy0xNDEzLSAqIGdyb3VwcyBjYW4gYmUgc2VlbiBieSB0aGUgZmlsZXN5c3RlbS5cbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTctICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjE0MTg6c3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvcmVzaXplLmMtMTQxOS1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEgKmZsZXhfZ2QpXG4tLVxuZnMvZXh0NC9yZXNpemUuYz0xNTM4PXN0YXRpYyBpbnQgZXh0NF9mbGV4X2dyb3VwX2FkZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTU5NC1cbmZzL2V4dDQvcmVzaXplLmM6MTU5NTpcdGV4dDRfdXBkYXRlX3N1cGVyKHNiLCBmbGV4X2dkKTtcbmZzL2V4dDQvcmVzaXplLmMtMTU5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYSBmZXcga2V5IG9wZXJhdGlvbnMgaGVyZSwgYW5kIHRoZSBudWFuY2VzIGJldHdlZW4gdGhlbSBhcmUgaW1wb3J0YW50LiBGaXJzdCwgdGhlcmUmIzM5O3MgYGV4dDRfZmxleF9ncm91cF9hZGRgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1ldGFkYXRhIGxheW91dCBhbmQgaG93IHRoaXMgYWZmZWN0cyBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIGxhcmdlIGZpbGVzIGFuZCBzcGFyc2UgYWxsb2NhdGlvbi4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmFkZS1vZmZzIGluIHRlcm1zIG9mIGJsb2NrIGdyb3VwIGxheW91dCB3aGVuIGFkZGluZyBhIGZsZXhpYmxlIGdyb3VwPyBJIG5lZWQgdG8gd2VpZ2ggdGhlIGJlbmVmaXRzIG9mIHJlZHVjZWQgZnJhZ21lbnRhdGlvbiBhZ2FpbnN0IHRoZSBvdmVyaGVhZCBvZiBtb3JlIGNvbXBsZXggbWV0YWRhdGEgbWFuYWdlbWVudC4gVGhlbiwgSSYjMzk7bSBwaXZvdGluZyB0byBgZXh0NF9ncm91cF9hZGRgLiBUaGlzIGlzIHRoZSBtb3JlIGdlbmVyYWwgY2FzZSBvZiBhZGRpbmcgYSBibG9jayBncm91cDsgYXJlIHRoZXJlIGRpZmZlcmVuY2VzIGluIHRoZSBhbGdvcml0aG1zIGZvciBhbGxvY2F0aW5nIHRoZSBuZXcgYmxvY2sgZ3JvdXAgdnMgYSBmbGV4aWJsZSBncm91cD8gUGVyaGFwcyB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIG9uIGV4aXN0aW5nIGJsb2NrIGdyb3VwIGxheW91dCBvciBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24sIGFuZCB0aGVzZSBjYW4gaW5mb3JtIGRlY2lzaW9ucyBhYm91dCB0aGUgYmVzdCBhcHByb2FjaC4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBleHQ0X3Jlc2l6ZV9mc2AuIEFyZSB0aGVzZSBhZGRpdGlvbnMgcGFydCBvZiBhIHJlc2l6ZSBvcGVyYXRpb24/IElmIHNvLCB0aGUgY29uc3RyYWludHMgb2YgdGhlIHJlc2l6ZSAoZS5nLiwgd2hldGhlciBpdCYjMzk7cyBhbiBvbmxpbmUgb3Igb2ZmbGluZSByZXNpemUpIHdpbGwgZGljdGF0ZSB0aGUgYXZhaWxhYmxlIHN0cmF0ZWdpZXMgZm9yIGFkZGluZyBibG9jayBncm91cHMuIEl0JiMzOTtzIGEgcXVlc3Rpb24gb2YgaG93IHRvIGV4dGVuZCB0aGUgZmlsZSBzeXN0ZW0gZWZmZWN0aXZlbHksIHdoaWxlIG1pbmltaXppbmcgZGlzcnVwdGlvbiB0byBvbmdvaW5nIEkvTyBvcGVyYXRpb25zIGFuZCBlbnN1cmluZyBkYXRhIGludGVncml0eS4gVGhlIGdvYWwgaXMgZWZmaWNpZW50IGFuZCByb2J1c3QgZmlsZSBzeXN0ZW0gZXhwYW5zaW9uLCBhbmQgdGhlIHNlbGVjdGlvbiBvZiB0aGUgY29ycmVjdCBhZGRpdGlvbiBwcm9jZWR1cmUgaXMgY3JpdGljYWwgdG8gYWNoaWV2aW5nIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSpleHQ0X3Jlc2l6ZV9mc1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zMjg2PWV4dGVybiBpbnQgZXh0NF9ncm91cF9leHRlbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2V4dDQuaC0zMjg4LVx0XHRcdFx0ZXh0NF9mc2Jsa190IG5fYmxvY2tzX2NvdW50KTtcbmZzL2V4dDQvZXh0NC5oOjMyODk6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xuZnMvZXh0NC9leHQ0LmgtMzI5MC1leHRlcm4gdW5zaWduZWQgaW50IGV4dDRfbGlzdF9iYWNrdXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9yZXNpemUuYz0xOTEyPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X21ldGFfYmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTgtICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjE5OTk6aW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudClcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gRmlsZXN5c3RlbSBSZXNpemluZyoqCgpPa2F5LCBgZXh0NF9yZXNpemVfZnNgIGZlZWxzIGxpa2UgYSBnb29kLCBzb2xpZCBwb2ludCB0byBiZWdpbiBmb2N1c2luZyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGZpbGVzeXN0ZW0gcmVzaXppbmcgcHJvY2VzcyBhbmQgbGlrZWx5IGludm9sdmVzIG51bWVyb3VzIGNydWNpYWwgaW50ZXJhY3Rpb25zLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGF0LCBhIHF1aWNrIGNoZWNrLWluLiBMZXQmIzM5O3Mgc2VlIGhvdyBgcGlkZmRfaW5mb2AgdGllcyBpbnRvIHRoaXMuIFBlcmhhcHMgdGhlIFBJREZEIGluZm9ybWF0aW9uIGhhcyBzb21lIHJlbGV2YW50IGFzcGVjdHMgd2l0aCBob3cgcHJvY2Vzc2VzIGludGVyYWN0IGR1cmluZyBmaWxlc3lzdGVtIHJlc2l6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnBpZGZkX2luZm9cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYz0zMzk9c3RhdGljIF9fdTMyIHBpZGZzX2NvcmVkdW1wX21hc2soZW51bSB0YXNrX2R1bXBhYmxlIGR1bXBhYmxlKVxuLS1cbmZzL3BpZGZzLmMtMzY0LVxuZnMvcGlkZnMuYzozNjU6c3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9waWRmcy5jLTM2Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhpcyBkb21haW46CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBwaWRmZF9pbmZvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBpZGZkX2luZm9gIGhlcmUuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCBpdCYjMzk7cyBhICoqc3RhdGljKiogc3RydWN0dXJlIG9yIHZhcmlhYmxlLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY291cGxlIG9mIHRoaW5ncyB0byBtZS4gRmlyc3QsIGl0cyBzY29wZSBpcyBsaWtlbHkgbGltaXRlZCwgcHJvYmFibHkgd2l0aGluIGEgcGFydGljdWxhciBtb2R1bGUgb3Igc291cmNlIGZpbGUuIEFuZCBzZWNvbmRseSwgc2luY2UgaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGFueSBkYXRhIGl0IGhvbGRzIHdvbiYjMzk7dCBjaGFuZ2UgZHluYW1pY2FsbHkgdW5sZXNzIHRoZSBjb2RlIGV4cGxpY2l0bHkgdXBkYXRlcyBpdC4KCkFuZCB3aGVyZSBkb2VzIGl0IGNvbWUgaW50byBwbGF5PyBBaCwgeWVzLCBpdOKAmXMgdXNlZCB3aXRoaW4gYHBpZGZkX2lvY3RsYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBtZWFucyB0aGF0IHdoZW5ldmVyIHdl4oCZcmUgZGVhbGluZyB3aXRoIHRoZSBgcGlkZmRfaW9jdGxgIHN5c3RlbSBjYWxsLCB0aGUgY29udGVudHMgb2YgYHBpZGZkX2luZm9gIGFyZSBsaWtlbHkgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQgaW4gc29tZSB3YXkuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYHBpZGZkX2lvY3RsYCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGJ1dCB0aGlzIGNvbm5lY3Rpb24gaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhpcyBsaWtlbHkgY29udGFpbnMgY3J1Y2lhbCBpbmZvcm1hdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBvZiB0aGUgaW9jdGwgY2FsbCwgd2hpY2ggaXMgdHlwaWNhbGx5IGZvciBwcm9jZXNzIG1hbmFnZW1lbnQgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqcGlkZmRfaW9jdGxcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYz00OTc9c3RhdGljIGJvb2wgcGlkZnNfaW9jdGxfdmFsaWQodW5zaWduZWQgaW50IGNtZClcbi0tXG5mcy9waWRmcy5jLTUyNy1cbmZzL3BpZGZzLmM6NTI4OnN0YXRpYyBsb25nIHBpZGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL3BpZGZzLmMtNTI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyBgcGlkZmRfaW9jdGxgIGFuZCBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIGBwaWRmZF9pb2N0bGAgaXMgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGp1c3QgbGlrZSB0aGUgb3RoZXJzLiBJdCYjMzk7cyB0aGUgYGlvY3RsYCBoYW5kbGVyIGZvciB0aGUgcGlkZnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IEkgY2FuIGxldmVyYWdlIGluc3RlYWQ/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBpbnRlcmZhY2UuIEFoLCB3YWl0IGEgbWludXRlLCBJIHJlbWVtYmVyIG5vdyEgYHBpZGZkX2lvY3RsYCBpcyBhY3R1YWxseSByZWdpc3RlcmVkIHdpdGhpbiBgcGlkZnNfZmlsZV9vcGVyYXRpb25zYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGNsYXJpZmllcyBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBwaWRmcyBjb250ZXh0LiBHaXZlbiB0aGF0LCB1c2luZyBgcGlkZmRfaW9jdGxgIGRpcmVjdGx5IHNob3VsZCBiZSBwZXJmZWN0bHkgYWNjZXB0YWJsZSwgb3IgcG90ZW50aWFsbHkgYHN5c19waWRmZF9vcGVuYC4gVWx0aW1hdGVseSwgdGhvdWdoLCBgcGlkZmRfaW9jdGxgIHNlZW1zIGxpa2UgdGhlIGJlc3QgZml0IGhlcmUsIGdpdmVuIG15IGN1cnJlbnQgbmVlZC4gQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhhdCBkaXJlY3Rpb24gbm93LiBOZXh0LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBtYXBfd3JpdGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKm1hcF93cml0ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz04OTA9c3RhdGljIGJvb2wgdmVyaWZ5X3Jvb3RfbWFwKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTkzMS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjkzMjpzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy05MzMtXHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgYXJlIG15IG93bjoKCioqTXkgTWVudGFsIE1vZGVsIG9mIGBtYXBfd3JpdGVgKioKClJpZ2h0LCBzbyBgbWFwX3dyaXRlYC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciBmdW5jdGlvbnMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gYSBzcGVjaWZpYyBjb250ZXh0LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyAqc3RhdGljKjsgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIHdoaWNoIG9mdGVuIGltcGxpZXMgc29tZSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbCBvciB0aGF0IGl0JiMzOTtzIGNsb3NlbHkgdGllZCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS4KClRoZW4gSSBsb29rIGF0IHdoZXJlIGl0IGlzIGNhbGxlZCBmcm9tLiBBaGEhIGBwcm9jX3VpZF9tYXBfd3JpdGVgLCBgcHJvY19naWRfbWFwX3dyaXRlYCwgYW5kIGBwcm9jX3Byb2ppZF9tYXBfd3JpdGVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYG1hcF93cml0ZWAgaXMgdGhlICpjb3JlKiB3cml0ZXIgZnVuY3Rpb24gZm9yICptYXBwaW5ncyogb2YgVUlEcywgR0lEcywgYW5kIHByb2pJRHMuIFRob3NlIGBwcm9jXypfbWFwX3dyaXRlYCBmdW5jdGlvbnMgYXJlIG1vc3QgbGlrZWx5IHRoZSBlbnRyeSBwb2ludHMgZm9yIHdyaXRpbmcgdGhlc2UgSUQgbWFwcGluZ3MgaW50byB0aGUga2VybmVsJiMzOTtzIHByb2Nlc3MgbmFtZXNwYWNlcywgZWl0aGVyIHZpYSBgL3Byb2NgIGZpbGVzeXN0ZW0gZW50cmllcyBvciBhIHJlbGF0ZWQgaW50ZXJmYWNlLiBUaGUgc3RydWN0dXJlIG9mIHRoaXMgcGF0dGVybiBpcyBwcmV0dHkgc3RhbmRhcmQsIEkgY2FuIGV4cGVjdCB0aGUgYG1hcF93cml0ZWAgdG8gbGlrZWx5IGJlIGRlYWxpbmcgd2l0aCB0aGUgYWN0dWFsIGRhdGEgc3RydWN0dXJlIG1vZGlmaWNhdGlvbnMuIEl0cyBzdGF0aWMtbmVzcyByZWluZm9yY2VzIHRoaXMgZGVzaWduLCBhcyBpdCYjMzk7cyB0aGUgY29yZSB3b3JraG9yc2UsIGFuZCB0aGUgbmFtZXNwYWNlLXNwZWNpZmljIHdyaXRlcnMgaGFuZGxlIGFueSB2YWxpZGF0aW9uIG9yIHNldHVwLiBJIGNhbiBndWVzcyB0aGVyZSBpcyBkYXRhIHNhbml0aXphdGlvbiBnb2luZyBvbiBpbiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhleSBoYW5kbGUgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnByb2NfdWlkX21hcF93cml0ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmg9MTk5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJvY19wcm9qaWRfc2VxX29wZXJhdGlvbnM7XG5pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmg6MjAwOmV4dGVybiBzc2l6ZV90IHByb2NfdWlkX21hcF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTtcbmluY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaC0yMDEtZXh0ZXJuIHNzaXplX3QgcHJvY19naWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopO1xuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTkzMj1zdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEyMS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjExMjI6c3NpemVfdCBwcm9jX3VpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMTIzLVx0XHRcdCAgIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBwb3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipGb2N1c2luZyBJbiBvbiB0aGUgS2VybmVsJiMzOTtzIElTTy1UUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBgcHJvY191aWRfbWFwX3dyaXRlYCBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGxlYWQsIGJ1dCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGRldG91ciBhbmQgZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aGF0JiMzOTtzIGxpa2VseSBtb3JlIHJlbGV2YW50IHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gYGlzb3RwX3NlbmRtc2dgLiBXaGlsZSBgcHJvY191aWRfbWFwX3dyaXRlYCBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5IGFuZCB1c2VyLUlEIG1hcHBpbmcgd2l0aGluIHRoZSBwcm9jZXNzIGNvbnRleHQsIGBpc290cF9zZW5kbXNnYCBoYW5kbGVzIHRoZSBhY3R1YWwgdHJhbnNtaXNzaW9uIG9mIElTTy1UUCBtZXNzYWdlcywgc28gaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgSVNPLVRQIGltcGxlbWVudGF0aW9uIGxpZXMuIEtub3dpbmcgaG93IHRoYXQgd29ya3Mgd2lsbCBsaWtlbHkgaW5mb3JtIHRoZSByZXN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKmlzb3RwX3NlbmRtc2dcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTEwODg9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTEwMy1cbm5ldC9jYW4vaXNvdHAuYzoxMTA0OnN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2Nhbi9pc290cC5jLTExMDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJU09UUCBhbmQgRnV6emluZyoqCgpPa2F5LCBzbyBgaXNvdHBfc2VuZG1zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHJlZ2lzdGVyZWQgd2l0aGluIGBpc290cF9vcHNgLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEga25vd24gcXVhbnRpdHkuIEkgd2FzIGJyaWVmbHkgY29uc2lkZXJpbmcgd2hldGhlciBgaXNvdHBfYmluZGAgb3IgYGlzb3RwX3NldHNvY2tvcHRgIG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUsIHBlcmhhcHMgbm9uLXN0YXRpYywgY2FuZGlkYXRlcyBmb3IgZm9jdXNlZCBhbmFseXNpcy4gQnV0LCBhcyB0aGUgc2VuZG1zZyBoYW5kbGVyLCBgaXNvdHBfc2VuZG1zZ2Agc2VlbXMgcGVyZmVjdGx5IGZpbmUuIFRoZSBmdXp6ZXIgdW5kZXJzdGFuZHMgaG93IHRvIGludGVyYWN0IHdpdGggQ0FOIElTT1RQIHNvY2tldHMgdmlhIGBzZW5kbXNnYCwgc28gdGFyZ2V0aW5nIHRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYHRjZl9nYWN0X2luaXRgLiBTZWUgd2hhdCB0aGF0IGNhbiB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnRjZl9nYWN0X2luaXRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYWN0LmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGdhY3RfcG9saWN5W1RDQV9HQUNUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy01MC1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjUxOnN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTUyLVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqQW5hbHl6aW5nIHRoZSBHbG9iYWwgQWN0aW9uIENsYXNzaWZpZXIgKEdBQykgSW5pdGlhbGl6YXRpb24gYW5kIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB0Y2ZfZ2FjdGAgY29kZS4gSSBzZWUgdGhhdCB0aGUgYHRjZl9nYWN0X2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBHQUMsIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gSSYjMzk7dmUgYWxzbyB0cmFja2VkIGRvd24gdGhhdCBpdCYjMzk7cyByZWdpc3RlcmVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UgdmlhIGBhY3RfZ2FjdF9vcHMuaW5pdGAuIE1ha2VzIHNlbnNlLCBzbyBmYXIuCgpOb3cgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhICpub24qLXN0YXRpYyBlbnRyeSBwb2ludC4gSSYjMzk7dmUgZm91bmQgYHRjZl9nYWN0X2FjdGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpwZXJmb3JtcyogdGhlIGFjdGlvbiBvciBwcm9jZXNzaW5nLiBUaGUgY3JpdGljYWwgZGV0YWlsIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBtYXJrZWQgYXMgYFRDX0lORElSRUNUX1NDT1BFYC4gVGhpcyB0aHJvd3MgYSBiaXQgb2YgYSBjdXJ2ZWJhbGwuIFdoYXQgdGhhdCAqdHlwaWNhbGx5KiBtZWFucyBpcyB0aGF0IGB0Y2ZfZ2FjdF9hY3RgIGlzIG5vbi1zdGF0aWMgKGF2YWlsYWJsZSBleHRlcm5hbGx5KSwgKnVubGVzcyogdGhleSYjMzk7dmUgZGlzYWJsZWQgaW5kaXJlY3QgY2FsbHMsIGF0IHdoaWNoIHBvaW50IGl0JiMzOTtzIHVzdWFsbHkgYHN0YXRpY2AsIG9yIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VlIHdoaWNoIGlzIHRoZSBjYXNlLiBCYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiwgaXQgY291bGQgYmUgY2FsbGVkIGRpcmVjdGx5LCBpbmRpcmVjdGx5IG9yIGl0IGlzIHN0YXRpYyBhbmQgbm90IGNhbGxlZCBleHRlcm5hbGx5LiBUaGlzIGltcGFjdHMgaG93IGFuZCB3aGVyZSB0aGUgR0FDIGNhbiBiZSBpbnZva2VkLiBJIGhhdmUgdG8gbG9vayBhIGxpdHRsZSBkZWVwZXIgdG8gc2VlIGhvdyBpdCYjMzk7cyBhY3R1YWxseSB1c2VkIGluIGEgcHJhY3RpY2FsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSp0Y2ZfZ2FjdF9hY3RcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGF0IERpZmY6IFRDX0lORElSRUNUX1NDT1BFIGFuZCBza2IqKgoKT2theSwgdGhlIGRpZmbigKYgaGFuZyBvbi4gYFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfZ2FjdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixgIC4uLiB0aGF0IGxpbmUganVtcHMgb3V0IGF0IG1lLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBgdGNmX2dhY3RfYWN0YCwgdGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyBhY3Rpb24gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLCByaWdodD8gQW5kIGBza2JgLCBvZiBjb3Vyc2UsIGlzIHRoZSBjcnVjaWFsIHNvY2tldCBidWZmZXIuIEJ1dCB0aGUgYFRDX0lORElSRUNUX1NDT1BFYCBpcyB3aGF0IGhhcyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2hhbmdlIGhhcyBvY2N1cnJlZCBhcm91bmQgdGhpcyBmdW5jdGlvbiBjYWxsLiBXaGF04oCZcyB1c2luZyBpdD8gV2h5IGlzIGl0IHRoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhY3QuYz01MT1zdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMTMzLVx0XHRnYWN0LVx1MDAzZXRjZmdfcHZhbCAgICA9IG1heF90KHUxNiwgMSwgcF9wYXJtLVx1MDAzZXB2YWwpO1xubmV0L3NjaGVkL2FjdF9nYWN0LmM6MTM0Olx0XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi9cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTEzNS1cdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlLCBwX3Bhcm0tXHUwMDNlcHR5cGUpO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTE0OC1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjE0OTpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0xNTAtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jPTI4OD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhY3Rfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTI5MS1cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjI5MjpcdC5hY3RcdFx0PVx0dGNmX2dhY3RfYWN0LFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjkzLVx0LnN0YXRzX3VwZGF0ZVx0PVx0dGNmX2dhY3Rfc3RhdHNfdXBkYXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcyMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEFzeW5jaHJvbm91cyBJL08gTWVjaGFuaXNtcyoqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYHRjZl9nYWN0X2FjdGAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIG15IGN1cnJlbnQgbGluZSBvZiBpbnF1aXJ5LiBXaGVyZSBkb2VzIHRoaXMgZ28/IERvZXMgaXQgdGllIGludG8gdGhlIGFzeW5jaHJvbm91cyBJL08gcGF0aHdheXM/CgpIbW0sIEkmIzM5O20gYWxzbyB0aGlua2luZyBvZiBgZnMvYWlvLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFzeW5jaHJvbm91cyBJL08uIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYGFpb19yZWFkX2V2ZW50c19yaW5nYCBnZXRzIGNhbGxlZCBmcm9tIGByZWFkX2V2ZW50c2AuIFNvLCB0aGF0IHNlZW1zIGtleSwgc2luY2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gcmVhZGluZyBldmVudHMgcmVsYXRlZCB0byBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbCBjaGFpbiBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGV2ZW50IGhhbmRsaW5nIGZsb3cuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0Y2ZfZ2FjdF9hY3RgIGFuZCBhc3luY2hyb25vdXMgSS9PLiBJIG11c3QgZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSpyZWFkX2V2ZW50c1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9haW8uYz0xMzQ2PXN0YXRpYyBib29sIGFpb19yZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxuLS1cbmZzL2Fpby5jLTEzNjItXG5mcy9haW8uYzoxMzYzOnN0YXRpYyBsb25nIHJlYWRfZXZlbnRzKHN0cnVjdCBraW9jdHggKmN0eCwgbG9uZyBtaW5fbnIsIGxvbmcgbnIsXG5mcy9haW8uYy0xMzY0LVx0XHRcdHN0cnVjdCBpb19ldmVudCBfX3VzZXIgKmV2ZW50LFxuLS1cbnRvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYz0xNDkxPXN0YXRpYyBpbnQga3ZtX2xpdmVfb3Blbl9ldmVudHMoc3RydWN0IHBlcmZfa3ZtX3N0YXQgKmt2bSlcbi0tXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmMtMTU1MS1cbnRvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYzoxNTUyOnN0YXRpYyBpbnQgcmVhZF9ldmVudHMoc3RydWN0IHBlcmZfa3ZtX3N0YXQgKmt2bSlcbnRvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYy0xNTUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKlN0YXRpYyBGdW5jdGlvbiBEZWVwIERpdmU6IGByZWFkX2V2ZW50c2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgcmVhZF9ldmVudHNgIGlzIGRlZmluZWQgYXMgYSBgc3RhdGljYCBmdW5jdGlvbi4gVGhpcyBpc24mIzM5O3Qgc3VycHJpc2luZyBnaXZlbiBpdHMgbGlrZWx5IHJvbGUgaW4gYSBsb3ctbGV2ZWwgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgaXQmIzM5O3Mgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBJL08gZXZlbnQgaGFuZGxpbmcuCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgc3lzX2lvX2dldGV2ZW50c2Agc3Ryb25nbHkgaW1wbGllcyBhIGNvcmUgZnVuY3Rpb24gd2l0aGluIHRoZSBJL08gZXZlbnQgcmV0cmlldmFsIHN5c3RlbS4gVGhpcyBzZXR1cCBpcyB0eXBpY2FsOyBgc3lzX2lvX2dldGV2ZW50c2AgaXMgbGlrZWx5IHRoZSBleHBvc2VkIHN5c3RlbSBjYWxsIGludGVyZmFjZSB0aGF0IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCwgYW5kIGByZWFkX2V2ZW50c2AgaXMgdGhlIHVuZGVybHlpbmcgd29ya2hvcnNlIHRoYXQgYWN0dWFsbHkgcHVsbHMgdGhlIGV2ZW50IGRhdGEuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nICpob3cqIGl0IHByb2Nlc3NlcyB0aGUgcmVxdWVzdCBhbmQgKndoYXQqIG9wdGltaXphdGlvbnMgaXQgdXNlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoaXMgc3RhdGljIG5hdHVyZSBpcyBjb25jZWFsaW5nIGFueSBkYXRhIHJhY2VzIG9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGFuZCBpZiB0aGUgb3B0aW1pemF0aW9uIGlzIHRocmVhZCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKnN5c19pb19nZXRldmVudHNcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTMxND1hc21saW5rYWdlIGxvbmcgc3lzX2lvX2NhbmNlbChhaW9fY29udGV4dF90IGN0eF9pZCwgc3RydWN0IGlvY2IgX191c2VyICppb2NiLFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTMxNS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fZXZlbnQgX191c2VyICpyZXN1bHQpO1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjMxNjphc21saW5rYWdlIGxvbmcgc3lzX2lvX2dldGV2ZW50cyhhaW9fY29udGV4dF90IGN0eF9pZCxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0zMTctXHRcdFx0XHRsb25nIG1pbl9ucixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRm9jdXNpbmcgTXkgQW5hbHlzaXMqKgoKUmlnaHQsIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHN5bWJvbCB0byByZWFsbHkgZGlnIGludG8uIEl0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgdGhhdCBvZnRlbiBtZWFucyBpdCYjMzk7cyBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKQnV0IHdhaXQsIHdoYXQgYWJvdXQgYGZzL2ZpbGUuY2A/IFRoYXQgZmVlbHMgbGlrZSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZSB0b28sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBJL08uIEkgYmV0IHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGxvdy1sZXZlbCBpbnRlcmFjdGlvbiBkZXRhaWxzLiBBaCwgYW5kIGhlcmUmIzM5O3MgYSBwb3RlbnRpYWxseSB1c2VmdWwgbm90ZSwgYGV4cGFuZF9maWxlc2AgaXMgY2FsbGVkIGZyb20gYGFsbG9jX2ZkYC4gR29vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSphbGxvY19mZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maWxlLmM9NTQzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X2ZkKHN0cnVjdCBmZHRhYmxlICpmZHQsIHVuc2lnbmVkIGludCBzdGFydClcbi0tXG5mcy9maWxlLmMtNTY3LSAqL1xuZnMvZmlsZS5jOjU2ODpzdGF0aWMgaW50IGFsbG9jX2ZkKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGZsYWdzKVxuZnMvZmlsZS5jLTU2OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIGBhbGxvY19mZGAgRnVuY3Rpb24mIzM5O3MgU2NvcGUgYW5kIFVzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWxsb2NfZmRgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBoYXMgaW50ZXJuYWwgbGlua2FnZSwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGRlc2lnbiBjaG9pY2UsIGxpa2VseSBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBmaWxlIGRlc2NyaXB0b3IgYWxsb2NhdGlvbiBsb2dpYyBhbmQgcHJldmVudCBhY2NpZGVudGFsIG1pc3VzZSBvciBtb2RpZmljYXRpb24gZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gSXQgYWxzbyBpbXBsaWVzIGl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBmb3IgZ2VuZXJhbCB1c2UuCgpOb3csIHRoZSBjb2RlIG1lbnRpb25zIHRoYXQgYGFsbG9jX2ZkYCBpcyBjYWxsZWQgZnJvbSBgZ2V0X3VudXNlZF9mZF9mbGFnc2AuIFRoaXMgaXMgdGhlIGtleS4gR2l2ZW4gdGhhdCwgSSBjYW4gZGVkdWNlIHRoYXQgYGdldF91bnVzZWRfZmRfZmxhZ3NgIGxpa2VseSBwZXJmb3JtcyBzb21lIGhpZ2hlci1sZXZlbCB0YXNrIGludm9sdmluZyBmaW5kaW5nIG9yIGNyZWF0aW5nIGEgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYGFsbG9jX2ZkYCBpcyB0aGUgbG93LWxldmVsIHV0aWxpdHkgZnVuY3Rpb24gaXQgY2FsbHMgdG8gYWN0dWFsbHkgZ3JhYiBhbiBhdmFpbGFibGUgZGVzY3JpcHRvci4gYGdldF91bnVzZWRfZmRfZmxhZ3NgIHByb2JhYmx5IHNldHMgZmxhZ3MgZHVyaW5nIHRoaXMgYWxsb2NhdGlvbiwgdGhvdWdoIHdpdGhvdXQgYSBsb29rIGF0IGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCwgSSBjYW4gb25seSBzcGVjdWxhdGUgb24gdGhlIGRldGFpbHMuCgpUaGUgZmFjdCB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGludGVydHdpbmVkIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHByb2JhYmx5IGEgdGlnaHQgY291cGxpbmcgYmV0d2VlbiB0aGUgdGFzayBvZiAqZmluZGluZyogdGhlIGRlc2NyaXB0b3IgKGluIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCksICphbGxvY2F0aW5nKiBpdCAodXNpbmcgYGFsbG9jX2ZkYCksIGFuZCBwb3RlbnRpYWxseSBzZXR0aW5nIGZsYWdzIG9uIHRoZSBuZXcgZGVzY3JpcHRvci4gTWFrZXMgc2Vuc2UuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgbW9kdWxhcml0eSBvZiB0aGUgY29kZSBhIGJpdCBiZXR0ZXIuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGF0IGBhbGxvY19mZGAgaXMgYSAqdmVyeSogaW1wb3J0YW50IHV0aWxpdHkgZm9yIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhbYS16MC05X10mIzQzOyApKmdldF91bnVzZWRfZmRfZmxhZ3NcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmlsZS5jPTYxMz1pbnQgX19nZXRfdW51c2VkX2ZkX2ZsYWdzKHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBsb25nIG5vZmlsZSlcbi0tXG5mcy9maWxlLmMtNjE3LVxuZnMvZmlsZS5jOjYxODppbnQgZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncylcbmZzL2ZpbGUuYy02MTkte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsZS5oPTkxPWV4dGVybiBpbnQgX19nZXRfdW51c2VkX2ZkX2ZsYWdzKHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBsb25nIG5vZmlsZSk7XG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo5MjpleHRlcm4gaW50IGdldF91bnVzZWRfZmRfZmxhZ3ModW5zaWduZWQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9maWxlLmgtOTMtZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9mZCh1bnNpZ25lZCBpbnQgZmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBTb2NrZXQgUmV1c2UgYW5kIFVudXNlZCBGaWxlIERlc2NyaXB0b3JzKioKCk9rYXksIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCDigJMgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCwgc29saWQgcG9pbnQgdG8gc3RhcnQgd2l0aC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgZmlsZSBkZXNjcmlwdG9ycywgYW5kIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgc29ja2V0IHJldXNlIHRvdWNoZXMgdGhpbmdzLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgcmVsYXRlZCB0byB0aGUgcmV1c2Vwb3J0IGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgY29uc2lkZXIgYG5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNgLiAqVGhhdCYjMzk7cyogd2hlcmUgdGhlIGNvcmUgcmV1c2Vwb3J0IGxvZ2ljIHJlc2lkZXMsIHNvIHRoYXQmIzM5O3Mgb2J2aW91c2x5IHJlbGV2YW50LiBJIHNlZSBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBhbmQgYHJldXNlcG9ydF9taWdyYXRlX3NvY2tgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgYW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIHN0YXRlIG9mIHNvY2tldHMuIEFyZSB3ZSBjcmVhdGluZyBuZXcgRkRzLCBtaWdyYXRpbmcgZXhpc3Rpbmcgb25lcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgZGVlcGVyIGRpdmUgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgVGhhdCBEaWZmKioKCk9rYXksIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIE15IGluaXRpYWwgcGFzcyB3YXMgcXVpY2ssIGJ1dCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBJIHNhdyBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpbiB0aGUgY2hhbmdlcy4gVGhhdCYjMzk7cyBub3QganVzdCBhbnkgcmFuZG9tIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSB3aGVuIG9wdGltaXppbmcgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgc29ja2V0IGJpbmRpbmcuICYjMzQ7cmV1c2Vwb3J0LCYjMzQ7IG9mIGNvdXJzZSwgaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIEkgd29uZGVyIHdoeSB0aGlzIGlzIHJlbGV2YW50LiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIG9yIG1heWJlIGEgY29ycmVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHQgb2Ygd2hlcmUgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgaXMgYmVpbmcgaW1wbGVtZW50ZWQuIElzIHRoaXMgYWRkcmVzc2luZyBhIHNwZWNpZmljIHNjYWxhYmlsaXR5IGJvdHRsZW5lY2s/IEEgcGFydGljdWxhciBlZGdlIGNhc2U/IExldCYjMzk7cyB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgY2hhbmdlIGZpdHMgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBzZWUgdGhlIG92ZXJhbGwgcmF0aW9uYWxlLiBJdCBjb3VsZCBjb21wbGV0ZWx5IGNoYW5nZSB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JldXNlcG9ydF9zZWxlY3Rfc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00MD1zdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9nZXRfaW5jb21pbmdfY3B1KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTQxLXtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NDI6XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLiAqL1xubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00My1cdFdSSVRFX09OQ0UocmV1c2UtXHUwMDNlaW5jb21pbmdfY3B1LCByZXVzZS1cdTAwM2VpbmNvbWluZ19jcHUgJiM0MzsgMSk7XG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00Nj1zdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9wdXRfaW5jb21pbmdfY3B1KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTQ3LXtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NDg6XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLiAqL1xubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00OS1cdFdSSVRFX09OQ0UocmV1c2UtXHUwMDNlaW5jb21pbmdfY3B1LCByZXVzZS1cdTAwM2VpbmNvbWluZ19jcHUgLSAxKTtcbi0tXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTY0PXZvaWQgcmV1c2Vwb3J0X3VwZGF0ZV9pbmNvbWluZ19jcHUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtODItXHQgKlxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo4MzpcdCAqIFBhaXJlZCB3aXRoIFJFQURfT05DRSgpIGluIHJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKCkuXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTg0LVx0ICovXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00OTc9c3RhdGljIHN0cnVjdCBzb2NrICpydW5fYnBmX2ZpbHRlcihzdHJ1Y3Qgc29ja19yZXVzZXBvcnQgKnJldXNlLCB1MTYgc29ja3MsXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01MjYtXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjUyNzpzdGF0aWMgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UsXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTUyOC1cdFx0XHRcdFx0XHQgIHUzMiBoYXNoLCB1MTYgbnVtX3NvY2tzKVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTU4LS8qKlxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo1NTk6ICogIHJldXNlcG9ydF9zZWxlY3Rfc29jayAtIFNlbGVjdCBhIHNvY2tldCBmcm9tIGFuIFNPX1JFVVNFUE9SVCBncm91cC5cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTYwLSAqICBAc2s6IEZpcnN0IHNvY2tldCBpbiB0aGUgZ3JvdXAuXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NjctICovXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjU2ODpzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTY5LVx0XHRcdFx0ICAgdTMyIGhhc2gsXG4tLVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01OTktXHRcdGlmICghc2syKVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo2MDA6XHRcdFx0c2syID0gcmV1c2Vwb3J0X3NlbGVjdF9zb2NrX2J5X2hhc2gocmV1c2UsIGhhc2gsIHNvY2tzKTtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjAxLVx0fVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjA2LX1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NjA3OkVYUE9SVF9TWU1CT0wocmV1c2Vwb3J0X3NlbGVjdF9zb2NrKTtcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjA4LVxuLS1cbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM9NjE4PXN0cnVjdCBzb2NrICpyZXVzZXBvcnRfbWlncmF0ZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTY2MS1cdGlmICghbnNrKVxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo2NjI6XHRcdG5zayA9IHJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKHJldXNlLCBoYXNoLCBzb2Nrcyk7XG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTY2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwODcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBhbmQgU3RyaW5nIEZvcm1hdHRpbmcgVnVsbmVyYWJpbGl0aWVzKioKCkFscmlnaHQsIHNvIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgYW5kIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiB3aGF0JiMzOTtzIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCB3aGF0IGRhdGEgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIHRvIGV2YWx1YXRlIGFueSBwb3NzaWJsZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgcmVsYXRlZCB0byBzb2NrZXQgcmV1c2UsIGVzcGVjaWFsbHkgaW4gbXVsdGktdGhyZWFkZWQgb3IgY29ubmVjdGlvbiBwb29saW5nIGVudmlyb25tZW50cy4KCk15IGluc3RpbmN0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIHN0cmluZyBmb3JtYXR0aW5nIGlzc3Vlcywgc28gSSB0aGluayB0byBteXNlbGY6ICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBsaWIvdnNwcmludGYuY2AuJiMzNDsgV2h5PyBXZWxsLCBgdnNwcmludGZgIGFuZCBpdHMgdmFyaWFudHMgKGxpa2UgYHZzbnByaW50ZmAsIGBzcHJpbnRmYCBldGMuKSBhcmUgbm90b3Jpb3VzIGZvciBmb3JtYXQgc3RyaW5nIHZ1bG5lcmFiaWxpdGllcy4gSWYgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgaXMgcGFzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gYSBmb3JtYXQgc3RyaW5nIGZ1bmN0aW9uLCBpdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcuIEV2ZW4gaWYgbm90IGRpcmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgZmxvdy4KCk15IG1pbmQgdGhlbiBxdWlja2x5IGp1bXBzIHRvIHNlYXJjaGluZyBmb3IgYSBjb25uZWN0aW9uOiBJcyBgZmlsbF9wdHJfa2V5YCBpbnZvbHZlZCBpbiBnZW5lcmF0aW5nIHRoZXNlIGtleXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIHZhZ3VlbHkgcmVtZW1iZXIgc2VlaW5nIGl0IGNhbGxlZCBmcm9tIGBwdHJfa2V5X3dvcmtmbmAgb3Igc29tZXRoaW5nIGluIHRoYXQgZG9tYWluLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBhbmQgYGZpbGxfcHRyX2tleWAgaXMgdXNlZCB0byBjcmVhdGUgb3IgaW5mbHVlbmNlIGFueSBzdHJpbmcgaW5wdXQsIGVzcGVjaWFsbHkgaWYgYSBwb2ludGVyIG9yIGtleSBvciBzaW1pbGFyLCBpbnRvIGEgYHZzcHJpbnRmYCBvciB0aGUgbGlrZSwgdGhhdCBjb3VsZCBiZWNvbWUgYSB2ZWN0b3IuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRhdGEgZmxvdyB0byBiZSBjZXJ0YWluLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nOiBpcyB0aGVyZSBhbnkgY2hhbmNlIHRoZSBnZW5lcmF0ZWQga2V5IGNvdWxkIGNvbnRhaW4gZm9ybWF0IHNwZWNpZmllcnMsIGFuZCBtaWdodCB0aGlzIGJlIGV4cGxvaXRhYmxlPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gSSYjMzk7bSB0cnlpbmcgdG8gYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxsX3B0cl9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdnNwcmludGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdnNwcmludGYuYz03NTk9c3RhdGljIHNpcGhhc2hfa2V5X3QgcHRyX2tleSBfX3JlYWRfbW9zdGx5O1xubGliL3ZzcHJpbnRmLmMtNzYwLVxubGliL3ZzcHJpbnRmLmM6NzYxOnN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxubGliL3ZzcHJpbnRmLmMtNzYyLXtcbi0tXG5saWIvdnNwcmludGYuYz03NzA9c3RhdGljIGludCBfX2luaXQgdnNwcmludGZfaW5pdF9oYXNodmFsKHZvaWQpXG5saWIvdnNwcmludGYuYy03NzEte1xubGliL3ZzcHJpbnRmLmM6NzcyOlx0c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmaWxsX3B0cl9rZXlfbmIgPSB7IC5ub3RpZmllcl9jYWxsID0gZmlsbF9wdHJfa2V5IH07XG5saWIvdnNwcmludGYuYzo3NzM6XHRleGVjdXRlX3dpdGhfaW5pdGlhbGl6ZWRfcm5nKFx1MDAyNmZpbGxfcHRyX2tleV9uYik7XG5saWIvdnNwcmludGYuYy03NzQtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgSW53YXJkOiBXaGVyZSBEb2VzIFRoaXMgTWF0dGVyPyoqCgpPa2F5LCBzbyBgZmlsbF9wdHJfa2V5YCBpcyBqdXN0IGFib3V0IGluaXRpYWxpemF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgdGhhdCBjcml0aWNhbC4gQW5kIGBfX3B0cl90b19oYXNodmFsYCBpcyBvbmx5IHRpZWQgdG8gdGhlIGAlcGAgZm9ybWF0dGluZywgd2hpY2gsIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLCBpcyBwcm9iYWJseSBhIG1pbm9yIGRldGFpbCwgYW5kIHRoZXJlZm9yZSBub3QgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3cuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZSBgdmxhbmAgYXJlYSBtaWdodCBiZSBrZXkuCgpNeSBmb2N1cyBzaG91bGQgYmUgc2hpZnRlZCB0byB3aGF0IGNhbGxzIGByZWdpc3Rlcl92bGFuX2RldmAsIGFzIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSB0aGVyZS4gSSBzaG91bGQgbG9vayBpbnRvIGBuZXQvODAyMXEvdmxhbi5jYCBhbmQgc2VlIHdoZXJlIEkgc2hvdWxkIGdvIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqcmVnaXN0ZXJfdmxhbl9kZXZcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0LzgwMjFxL3ZsYW4uYz0xMjU9aW50IHZsYW5fY2hlY2tfcmVhbF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuLmMtMTQ1LVxubmV0LzgwMjFxL3ZsYW4uYzoxNDY6aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbm5ldC84MDIxcS92bGFuLmMtMTQ3LXtcbi0tXG5uZXQvODAyMXEvdmxhbi5oPTE1MD12b2lkIHZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvODAyMXEvdmxhbi5oOjE1MTppbnQgcmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC84MDIxcS92bGFuLmgtMTUyLXZvaWQgdW5yZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMjYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiBSZWxldmFudCBLZXJuZWwgRnVuY3Rpb25zKioKCk9rYXksIGByZWdpc3Rlcl92bGFuX2RldmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMgZXhwbG9yYXRpb24uIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYGV4dDRfcmVzaXplX2ZzYCwgYHBpZGZkX2lvY3RsYCwgYHByb2NfdWlkX21hcF93cml0ZWAsIGBpc290cF9zZW5kbXNnYCwgYHRjZl9nYWN0X2FjdGAsIGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYW5kLCBvZiBjb3Vyc2UsIGByZWdpc3Rlcl92bGFuX2RldmAuCgpIbW0sIGBzeXNfaW9fZ2V0ZXZlbnRzYC4uLiByaWdodCwgdGhhdCYjMzk7cyBhIHN5c2NhbGwuIEltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBrZWVwIGluIG1pbmQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIGB0Y2ZfZ2FjdF9hY3RgLiBBaCwgeWVzLCBjb25maXJtZWQsIHRoYXQmIzM5O3MgaW4gYG5ldC9zY2hlZC9hY3RfZ2FjdC5jYC4gR29vZCwgZ29vZC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IHdpdGg6CgoqICAgYGV4dDRfcmVzaXplX2ZzYDogdGhhdCYjMzk7cyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19FWFQ0X0ZTYC4KKiAgIGBwaWRmZF9pb2N0bGA6IEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGhlcmUuLi4gaXMgaXQgcmVsYXRlZCB0byBgQ09ORklHX1BJRF9JTl9DT05URVhUX1NXSVRDSEVTYD8gTm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBPciBwZXJoYXBzIGBDT05GSUdfUElERlNgPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHBpZGZkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUElERlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg5MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7dmUgaGl0IGEgc25hZy4gTXkgYnJhaW4ganVzdCBkaWQgYSBkb3VibGUtdGFrZTsgYGZzL3BpZGZzLmNgLi4ud2FpdCBhIG1pbnV0ZSwgdGhhdCBzb3VyY2UgZmlsZSwgaXQmIzM5O3MgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0JiMzOTtzIG5vdCB0aGUgbm9ybS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGF0IHBsYXkgaGVyZS4gV2h5IHdvdWxkbiYjMzk7dCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgdW5pdmVyc2FsbHkgaW5jbHVkZWQ/IElzIHRoZXJlIGFuIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW5jeT8gQSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24/IFNvbWUgc29ydCBvZiBmZWF0dXJlIGZsYWc/IFRoaXMgcmFpc2VzIGFsbCBzb3J0cyBvZiBxdWVzdGlvbnMgYWJvdXQgcG9ydGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUuIElzIHRoZXJlIGFuICNpZmRlZiBibG9jayBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgaW52b2x2ZWQ/IFRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGJlaW5nIGRyaXZlbiBmcm9tLCBzaW5jZSBub3cgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGUtdGltZSBkZWNpc2lvbiBjcml0ZXJpYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGlkZnNcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEwPW9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG4tLVxuZnMvTWFrZWZpbGUtMTctXHRcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcbmZzL01ha2VmaWxlOjE4Olx0XHRrZXJuZWxfcmVhZF9maWxlLm8gbW50X2lkbWFwcGluZy5vIHJlbWFwX3JhbmdlLm8gcGlkZnMubyBcXFxuZnMvTWFrZWZpbGUtMTktXHRcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKktlcm5lbCBDb21waWxhdGlvbiBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBnb2VzIHRvIGNvbXBpbGF0aW9uLiBJdCBhbHdheXMgZG9lcywgcmVhbGx5LiBUaGUgY29yZSBjb25jZXB0IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBgcHJvY191aWRfbWFwX3dyaXRlYCwgaGFzIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYENPTkZJR19VU0VSX05TYC4gSXQmIzM5O3MgZW1iZWRkZWQgaW4gbXkgbWluZDogdXNlciBuYW1lc3BhY2VzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCB3aWxsIGJlaGF2ZS4gS25vd2luZyBpdCYjMzk7cyAqYWx3YXlzKiBjb21waWxlZCBtZWFucyB0aGlzIGRlcGVuZGVuY3kgaXMgaGFyZC13aXJlZCBhbmQgY2Fubm90IGJlIG9wdGlvbmFsbHkgZXhjbHVkZWQuIFRoZXJlZm9yZSwgaG93IGl0IGhhbmRsZXMgY29uZmlndXJhdGlvbiBhbmQgcGVybWlzc2lvbnMgd2lsbCBiZSBjcml0aWNhbGx5IGFmZmVjdGVkIGJ5IGhvdyBgQ09ORklHX1VTRVJfTlNgIGhhcyBiZWVuIHNldCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJfTlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0Mzg9Y29uZmlnIElQQ19OU1xuLS1cbmluaXQvS2NvbmZpZy0xNDQ1LVxuaW5pdC9LY29uZmlnOjE0NDY6Y29uZmlnIFVTRVJfTlNcbmluaXQvS2NvbmZpZy0xNDQ3LVx0Ym9vbCBcJiMzNDtVc2VyIG5hbWVzcGFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUxMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKk15IElTT1RQIFNlbmQgRnVuY3Rpb24mIzM5O3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgaXNvdHBfc2VuZG1zZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBsb2dpYyBhbmQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcmUgY29udGluZ2VudCBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfQ0FOX0lTT1RQYC4gSXQmIzM5O3MgYSBzaW1wbGUsIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LCBidXQgaXQmIzM5O3MgKmNyaXRpY2FsKi4gV2l0aG91dCBgQ09ORklHX0NBTl9JU09UUGAgZW5hYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCwgdGhhdCBgaXNvdHBfc2VuZG1zZ2AgZnVuY3Rpb24gc2ltcGx5IHdvbiYjMzk7dCBiZSBjb21waWxlZCwgYW5kIGFueSBhdHRlbXB0IHRvIHVzZSBpdCB3aWxsIGZhaWwgc3BlY3RhY3VsYXJseS4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCBmb3IgZW5zdXJpbmcgdGhlIElTT1RQIHRyYW5zcG9ydCBsYXllciBpcyBhY3R1YWxseSBwcmVzZW50IHdoZW4gdGhlIENBTiBzdWJzeXN0ZW0gYXR0ZW1wdHMgdG8gdXRpbGl6ZSBpdC4gSXQgaXMgcGFyYW1vdW50IHRoYXQgdGhpcyBmZWF0dXJlIGlzIGJvdGggYXZhaWxhYmxlIGFuZCBlbmFibGVkIGZvciB0aGUgYXBwbGljYXRpb24gdG8gZnVuY3Rpb24gYXBwcm9wcmlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBTl9JU09UUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldHdvcmsgVHJhZmZpYyBTaGFwaW5nIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayB0cmFmZmljIHNoYXBpbmcgZnVuY3Rpb25hbGl0aWVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgR2VuZXJpYyBBY3Rpb24gKEdBQ1QpIG1vZHVsZS4gVGhlIGlkZW50aWZpZXIgYHRjZl9nYWN0X2FjdGAgaW1tZWRpYXRlbHkgc2lnbmFscyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgJiMzNDthY3Rpb24mIzM0OyBwYXJ0IG9mIHRoaXMsIHRoZSBmaW5hbCBzdGVwIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKFRDKSBwcm9jZXNzLCBub3QgYSBjbGFzc2lmaWVyIG9yIG90aGVyIHVwc3RyZWFtIGNvbXBvbmVudC4gQW5kIHRoZSBkaXJlY3QgcmVmZXJlbmNlIHRvIGBDT05GSUdfTkVUX0FDVF9HQUNUYCBjb25maXJtcyB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IGV2YWx1YXRpbmcgdGhlIEdBQ1QgbW9kdWxlJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWVhbnMgSSYjMzk7bSBmb2N1c2VkIG9uIHdoYXQgYWN0aW9ucyBjYW4gYmUgdGFrZW4gb24gcGFja2V0cyBhZnRlciB0aGV5JiMzOTt2ZSBiZWVuIGNsYXNzaWZpZWQgYW5kIGZpbHRlcmVkLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGltcGxlbWVudGluZyBwb2xpY2llcywgZnJvbSBzaW1wbGUgcG9saWNpbmcgYW5kIGRyb3BwaW5nIHBhY2tldHMgdG8gbW9yZSBjb21wbGV4IHRhc2tzLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBpcyBjcml0aWNhbC4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIHRoZSBHQUNUIGFjdGlvbiBzaW1wbHkgd29uJiMzOTt0IGJlIGF2YWlsYWJsZSwgc2V2ZXJlbHkgbGltaXRpbmcgdHJhZmZpYyBjb250cm9sIG9wdGlvbnMgYXQgdGhpcyBwb2ludCBpbiB0aGUgcGFja2V0IGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0dBQ1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NzE1PWNvbmZpZyBORVRfQUNUX1BPTElDRVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcyNS1cbm5ldC9zY2hlZC9LY29uZmlnOjcyNjpjb25maWcgTkVUX0FDVF9HQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MjctXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGFjdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc3lzX2lvX2dldGV2ZW50c2AgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvIGBDT05GSUdfQUlPYC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbm5lY3Rpb24gaGVyZS4gYHN5c19pb19nZXRldmVudHNgIGlzLCBvZiBjb3Vyc2UsIHRoZSBzeXN0ZW0gY2FsbCBmb3IgcmV0cmlldmluZyBhc3luY2hyb25vdXMgSS9PIChBSU8pIGV2ZW50cy4gVGhpbmtpbmcgYWJvdXQgaXQgdGhpcyB3YXkgbmFycm93cyBkb3duIHRoZSBjb250ZXh0LiBUaGUgcHJlc2VuY2Ugb2YgYENPTkZJR19BSU9gIGRpY3RhdGVzIHdoZXRoZXIgdGhlIGVudGlyZSBBSU8gZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgd2l0aGluIHRoZSBrZXJuZWwuIFNvLCBpZiBgQ09ORklHX0FJT2AgaXMgbm90IGVuYWJsZWQsIGBzeXNfaW9fZ2V0ZXZlbnRzYCBpcyBlZmZlY3RpdmVseSBkaXNhYmxlZCwgcmlnaHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSU8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MDU9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE5MTUtXG5pbml0L0tjb25maWc6MTkxNjpjb25maWcgQUlPXG5pbml0L0tjb25maWctMTkxNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFJTyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQxMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNoZWNraW5nIENvbXBpbGF0aW9uIEZsYWdzIGFuZCBTb2NrZXQgUmV1c2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYGdldF91bnVzZWRfZmRfZmxhZ3NgIOKAkyB0aGF0IG9uZSYjMzk7cyBhbHdheXMgY29tcGlsZWQgaW4sIG5vIHByb2JsZW0gdGhlcmUuIEJ1dCB3aGF0IGFib3V0IGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgPyBJcyB0aGF0IGNvbnNpc3RlbnRseSBwYXJ0IG9mIHRoZSBidWlsZD8gSSAqdGhpbmsqIGl0IGlzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgbWV0aWN1bG91cyBhYm91dCB0aGVzZSB0aGluZ3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29ja2V0IG9wdGlvbnMgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIE1ha2luZyBzdXJlIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSBjb21waWxlZCBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfcmV1c2Vwb3J0XFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xMy1cdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTQ6XHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTUtXHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgVkxBTiBDb25maWd1cmF0aW9uKioKClllcywgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiBkZWFsaW5nIHdpdGggVkxBTiBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19WTEFOXzgwMjFRYC4gVGhhdCBtYWNybywgaWYgZGVmaW5lZCwgaXMgd2hhdCBlbmFibGVzIHRoZSBgcmVnaXN0ZXJfdmxhbl9kZXZgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgY29ybmVyc3RvbmUgZm9yIFZMQU4gZGV2aWNlIHJlZ2lzdHJhdGlvbi4gV2l0aG91dCB0aGlzIGJlaW5nIHNldCwgdGhlIFZMQU4gZnVuY3Rpb25hbGl0eSBpcyBub3QgZ29pbmcgdG8gd29yay4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkxBTl84MDIxUSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZy01LVxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxubmV0LzgwMjFxL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTIxLVxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxubmV0LzgwMjFxL0tjb25maWctMjMtXHRib29sIFwmIzM0O0dWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcbm5ldC84MDIxcS9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDtNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRG91YmxlLUNoZWNraW5nIGV4dDQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGp1c3QgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QuIEJlZm9yZSB3ZSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQuIEl0IHNvdW5kcyBiYXNpYywgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IHRoYXQgbWlzc2luZyBkZXBlbmRlbmNpZXMgY2FuIHdhc3RlIGEgaHVnZSBhbW91bnQgb2YgdGltZSwgYW5kIGNyZWF0ZSBpc3N1ZXMgdGhhdCBhcmUgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcuIFNvLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0IGlzIGFjdHVhbGx5IGNvbXBpbGVkIGluLiBObyBhc3N1bXB0aW9ucyBoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZsaWN0cyB3aXRoIGFueSBvdGhlciByZWxhdGVkIHNldHRpbmdzIHRoYXQgbWlnaHQgZGlzYWJsZSBpdC4gVGhpcyBpbml0aWFsIGNoZWNrIHdpbGwgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgRVhUNF9GU2AsIGBVU0VSX05TYCwgYENBTl9JU09UUGAsIGBORVRfQUNUX0dBQ1RgLCBgQUlPYCwgYW5kIGBWTEFOXzgwMl9RYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gY29uc2lkZXIuIExldCBtZSBzZWUuLi4gYGV4dDRfcmVzaXplX2ZzYCwgYHBpZGZkX2lvY3RsYCwgYHByb2NfdWlkX21hcF93cml0ZWAsIGBpc290cF9zZW5kbXNnYCwgYHRjZl9nYWN0X2FjdGAsIGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYW5kIGByZWdpc3Rlcl92bGFuX2RldmAuCgpIbW0sIG5vdywgaG9sZCBvbi4gYHN5c19pb19nZXRldmVudHNgLi4uIHRoYXQmIzM5O3MgYSBzeXNjYWxsLCBpc24mIzM5O3QgaXQ/IFN5emthbGxlciBwcm9iYWJseSBjYWxscyBpdCBgaW9fZ2V0ZXZlbnRzYCwgcmlnaHQ/IE1heWJlIGByZWFkX2V2ZW50c2Agd291bGQgYmUgYmV0dGVyPyBPciBwZXJoYXBzIGBhaW9fcmVhZF9ldmVudHNfcmluZ2A/IFRoYXQgb25lIGlzIHN0YXRpYy4uLiBidXQgaXQmIzM5O3MgdGhlIG1vZGlmaWVkIG9uZS4gWWVhaCwgbm8sIGxldCYjMzk7cyBzdGljayB3aXRoIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBzbyB0aGF0JiMzOTtzIHRoZSBjbGVhcmVzdCB0byB1c2UuCgpIYW5nIG9uIGEgc2Vjb25kLCB0aGF0IGBwaWRmZF9pb2N0bGAgaXMgYWxzbyBzdGF0aWMuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBpcyBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgZm9yIHBpZGZkLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGJlc3QgcG9zc2libGUgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oW2EtejAtOV9dJiM0MzsgKSpwaWRmZF9vcGVuXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHN5c19waWRmZF9vcGVuYCBTeXN0ZW0gQ2FsbCoqCgpPa2F5LCBgc3lzX3BpZGZkX29wZW5gLi4uIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgdGhlIHN0YW5kYXJkIHdheXMgdG8gaW50ZXJhY3Qgd2l0aCBwcm9jZXNzZXMg4oCTIGBmb3JrYCwgYGV4ZWN2ZWAsIHNpZ25hbHMsIG1vbml0b3JpbmcgdmlhIHByb2Nlc3MgSUQuIEJ1dCBgcGlkZmRfb3BlbmA/IFRoaXMgc3VnZ2VzdHMgYSBuZXcsIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvICpmaWxlIGRlc2NyaXB0b3JzKi4gVGhlICYjMzQ7ZmQmIzM0OyBpbiB0aGUgbmFtZSBpcyB0aGUga2V5LiBJdCYjMzk7cyBub3QganVzdCBhIFBJRCwgaXTigJlzIGEgKmRlc2NyaXB0b3IqIG9mIHRoZSBwcm9jZXNzIGl0c2VsZiwgbWFuYWdlZCB0aHJvdWdoIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0sIGxpa2UgZXZlcnl0aGluZyBlbHNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBoYXMgdG8gb2ZmZXIgc29tZXRoaW5nIGJleW9uZCB0aGUgZXhpc3RpbmcgUElELWJhc2VkIG1lY2hhbmlzbXMuIFdoeSBpbnRyb2R1Y2UgYSBuZXcgc3lzY2FsbCBpZiB0aGVyZSB3YXNuJiMzOTt0IGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlPyBDb3VsZCBpdCBiZSByZWxhdGVkIHRvIHNlY3VyaXR5LCBuYW1lc3BhY2UgaXNvbGF0aW9uLCBwZXJoYXBzIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nLCBvciBiZXR0ZXIgaW50ZWdyYXRpb24gd2l0aCBjYXBhYmlsaXRpZXM/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIGl0IFBPU0lYLWNvbXBsaWFudD8gRG9lcyBpdCBhZGRyZXNzIHJhY2UgY29uZGl0aW9ucyBhc3NvY2lhdGVkIHdpdGggUElEIHJldXNlPyBEb2VzIGl0IHByb3ZpZGUgZmluZXItZ3JhaW5lZCBjb250cm9sIG92ZXIgcHJvY2VzcyBvcGVyYXRpb25zIHRoYW4gc2lnbmFscyBvciBgcHRyYWNlYD8gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBodWdlIGlmIHRoaXMgaXMgdGhlIGNhc2UsIGFuZCBvcGVucyB1cCB0aGUgcG90ZW50aWFsIGZvciBpbXByb3ZlZCBwcm9jZXNzIG1vbml0b3JpbmcsIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiwgYW5kIHN5c3RlbS1sZXZlbCB0b29scy4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KFthLXowLTlfXSYjNDM7ICkqc3lzX3BpZGZkX29wZW5cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTkxMD1hc21saW5rYWdlIGxvbmcgc3lzX3NldG5zKGludCBmZCwgaW50IG5zdHlwZSk7XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6OTExOmFzbWxpbmthZ2UgbG9uZyBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtOTEyLWFzbWxpbmthZ2UgbG9uZyBzeXNfc2VuZG1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1zZyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGFza19sb2NhbF9zdG9yYWdlX2hlbHBlcnMuaC0xNi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oOjE3OnN0YXRpYyBpbmxpbmUgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rhc2tfbG9jYWxfc3RvcmFnZV9oZWxwZXJzLmgtMTgte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkLmg9MjI5PXN0YXRpYyBpbmxpbmUgaW50IHdhaXRfZm9yX3BpZChwaWRfdCBwaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmQuaC0yNTMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oOjI1NDpzdGF0aWMgaW5saW5lIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkLmgtMjU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGtleSBzeXN0ZW0gY2FsbCBvciBmdW5jdGlvbiByZWxhdGVkIHRvIGBwaWRmZF9pbmZvYC4gSSBrbm93IGBzeXNfcGlkZmRfb3BlbmAgaXMgdGhlIHN5c2NhbGwgdGhhdCBnZXRzIHRoaW5ncyBzdGFydGVkLCBidXQgYHBpZGZkX2luZm9gIGl0c2VsZiBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYHBpZGZkX2lvY3RsYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIHNwZWNpZmljIGBzeXNfcGlkZmRfaW9jdGxgIHN5c2NhbGw/IE5vLCBpdCYjMzk7cyBqdXN0IGEgc3RhbmRhcmQgYGlvY3RsYCBvbiB0aGUgcGlkZmQuIFRoYXQgbWVhbnMgdGhlIGVudHJ5IHBvaW50IGlzIHRoZSBnZW5lcmljIGBzeXNfaW9jdGxgLCB3aGljaCBpcyB3YXkgdG9vIGJyb2FkIHRvIGJlIHRydWx5IHVzZWZ1bC4KCkhvd2V2ZXIsIGBwaWRmZF9pb2N0bGAgaXMgKnN0YXRpYyouIEhtbS4gVXN1YWxseSwgdGhhdCB3b3VsZCBiZSBhIHByb2JsZW0gZm9yIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciwgYnV0IGl0IGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gSG9uZXN0bHksIGl0IG1pZ2h0IGV2ZW4gYmUgdGhlIHBlcmZlY3QgZm9jdXMgc3ltYm9sIGluIHRoaXMgY2FzZSwgYSB0aWdodCBhbmQgcmVsZXZhbnQgb25lLiBOb3csIHRoZSBrZXkgaXMgd2hldGhlciBgcGlkZmRfaW9jdGxgICppcyogYWN0dWFsbHkgaW5saW5lZCBvciBub3QuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWZvcmUgSSBjYW4gYmUgc3VyZSBpZiBJJiMzOTt2ZSBoaXQgdGhlIHN3ZWV0IHNwb3QuIExldCYjMzk7cyBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGlkZmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9waWRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3BpZGZzLmM9NDk3PXN0YXRpYyBib29sIHBpZGZzX2lvY3RsX3ZhbGlkKHVuc2lnbmVkIGludCBjbWQpXG4tLVxuZnMvcGlkZnMuYy01MjctXG5mcy9waWRmcy5jOjUyODpzdGF0aWMgbG9uZyBwaWRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9waWRmcy5jLTUyOS17XG4tLVxuZnMvcGlkZnMuYz02ODE9c3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL3BpZGZzLmMtNjg2LVxuZnMvcGlkZnMuYzo2ODc6XHRyZXR1cm4gcGlkZmRfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xuZnMvcGlkZnMuYy02ODgtfVxuLS1cbmZzL3BpZGZzLmM9NzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBpZGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9waWRmcy5jLTcxNi0jZW5kaWZcbmZzL3BpZGZzLmM6NzE3Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHBpZGZkX2lvY3RsLFxuZnMvcGlkZnMuYy03MTgtI2lmZGVmIENPTkZJR19DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3Qgc29tZXRoaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzICpub3QqIGdvaW5nIHRvIGJlIGlubGluZWQuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIEluIHRoZSBjb250ZXh0IG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGFueXRoaW5nIHRoYXQmIzM5O3Mgbm90IGlubGluZWQgaXMgYSByZWQgZmxhZywgYXMgaXQgY3JlYXRlcyBhbiBpbnRlcmVzdGluZyBjYWxsLWNoYWluIHRoYXQgY291bGQgYmUgbGV2ZXJhZ2VkLiBgcGlkZmRfaW9jdGxgIGp1bXBzIG91dCBhcyBhIHByZXR0eSBjb21wZWxsaW5nIGZvY3VzIHBvaW50IGdpdmVuIHRoZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdGFrZSBhIGRlZXBlciBkaXZlIGhlcmUuCgpMZXQmIzM5O3Mgc2VlLi4uIG5leHQgSSBzaG91bGQgY2hlY2sgb3V0IGBwcm9jX3VpZF9tYXBfd3JpdGVgLiBHb29kLCBpdCYjMzk7cyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgZGlyZWN0bHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgaW5pdGlhbCBleHBsb3JhdGlvbiwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKVGhlbiB3ZSYjMzk7dmUgZ290IGBpc290cF9zZW5kbXNnYC4gQWgsIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggKmNvdWxkKiByZWR1Y2UgaXRzIGFjY2Vzc2liaWxpdHksIGJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGJlaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaXMgaW50cmlndWluZy4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgZGVjbGFyZWQgc3RhdGljLCB0aGUgY2FsbC1jaGFpbiB0aGF0IGNhbiBwYXNzIGl0IGFzIGEgZnVuY3Rpb24gcG9pbnRlciBoYXMgdG8gYmUgc2NydXRpbml6ZWQsIGFzIGl0IGNvdWxkIGJlIHJlYWNoZWQgZnJvbSBzb21ld2hlcmUgd2UmIzM5O3JlIG5vdCBleHBlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL2lzb3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTEwODg9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTEwMy1cbm5ldC9jYW4vaXNvdHAuYzoxMTA0OnN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2Nhbi9pc290cC5jLTExMDUte1xuLS1cbm5ldC9jYW4vaXNvdHAuYz0yMDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGlzb3RwX29wcyA9IHtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMjAyMC1cdC5nZXRzb2Nrb3B0ID0gaXNvdHBfZ2V0c29ja29wdCxcbm5ldC9jYW4vaXNvdHAuYzoyMDIxOlx0LnNlbmRtc2cgPSBpc290cF9zZW5kbXNnLFxubmV0L2Nhbi9pc290cC5jLTIwMjItXHQucmVjdm1zZyA9IGlzb3RwX3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgS2VybmVsIFN5bWJvbCBBbmFseXNpcyoqCgpPa2F5LCBzbyBgaXNvdHBfc2VuZG1zZ2AgaXMgbG9va2luZyBnb29kIOKAkyBubyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuIE5vdywgbGV04oCZcyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBvdGhlciBjYW5kaWRhdGVzIEkmIzM5O3ZlIGJlZW4gY29uc2lkZXJpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4KCmB0Y2ZfZ2FjdF9hY3RgIC0gUmlnaHQsIGBUQ19JTkRJUkVDVF9TQ09QRWAgb24gdGhhdCBvbmUsIG1lYW5pbmcgaXQmIzM5O3Mgbm9uLXN0YXRpYywgYWxsIGdvb2QuIFRoZW4sIGBzeXNfaW9fZ2V0ZXZlbnRzYCwgeWVwLCB0aGF0JiMzOTtzIGEgc3lzY2FsbCwgc28gd2UmIzM5O3JlIHNldCB0aGVyZSBhcyB3ZWxsLiBNb3Zpbmcgb24sIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCDigJMgYWxzbyBub24tc3RhdGljLiBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpcyBleHBvcnRlZCwgYW5kIGByZWdpc3Rlcl92bGFuX2RldmAgdG9vLgoKQWxyaWdodCwgdGhhdCBjb25maXJtcyB0aGUgZm9sbG93aW5nIGFzIHRoZSBjb3JlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOgotICAgYGV4dDRfcmVzaXplX2ZzYAotICAgYHBpZGZkX2lvY3RsYAotICAgYHByb2NfdWlkX21hcF93cml0ZWAKLSAgIGBpc290cF9zZW5kbXNnYAotICAgYHRjZl9nYWN0X2FjdGAKLSAgIGBzeXNfaW9fZ2V0ZXZlbnRzYAotICAgYGdldF91bnVzZWRfZmRfZmxhZ3NgCi0gICBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYAotICAgYHJlZ2lzdGVyX3ZsYW5fZGV2YAoKQW5kIGluIHRlcm1zIG9mIHJlbGV2YW50IGNvbmZpZ3MsIEkmIzM5O20gbm90aW5nOgotICAgYEVYVDRfRlNgCi0gICBgVVNFUl9OU2AKLSAgIGBDQU5fSVNPVFBgCi0gICBgTkVUX0FDVF9HQUNUYAotICAgYEFJT2AKLSAgIGBWTEFOXzgwMjFRYAoKV2FpdCwgaGFuZyBvbi4gSSYjMzk7bSBqdXN0IHJlY2FsbGluZyB0aGF0IEkgc2F3IGBzdXBlcl9jYWNoZV9jb3VudGAgaW4gYGZzL3N1cGVyLmNgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGluZ3MgdGhhdCBhcmUgc3RhdGljLiBJcyB0aGVyZSBhIGJldHRlciBmb2N1cyBzeW1ib2wgcmVsYXRlZCB0byB0aGF0PyBNYXliZSBgbW91bnRfZnNgIG9yIGB2ZnNfZ2V0X3RyZWVgLi4uIGJ1dCBoYW5nIG9uLCBgc3VwZXJfY2FjaGVfY291bnRgIGlzIGZpbmUgYWN0dWFsbHkuIEkgcmVjYWxsIGl0JiMzOTtzIHN0YXRpYywgYnV0IEkgdGhpbmsgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMsIGJ1dCBJJiMzOTttIHRoaW5raW5nIHdlJiMzOTtyZSBvayBmb3Igbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdXBlcl9jYWNoZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYz0xOTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbi0tXG5mcy9zdXBlci5jLTI1MC1cbmZzL3N1cGVyLmM6MjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuZnMvc3VwZXIuYy0yNTItXHRcdFx0XHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5mcy9zdXBlci5jLTI2My1cdCAqIGxpc3RfbHJ1X3Nocmlua19jb3VudCgpIG9yIHNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoKS4gQ291bnRzIGNhblxuZnMvc3VwZXIuYzoyNjQ6XHQgKiBjaGFuZ2UgYmV0d2VlbiBzdXBlcl9jYWNoZV9jb3VudCBhbmQgc3VwZXJfY2FjaGVfc2Nhbiwgc28gd2UgcmVhbGx5XG5mcy9zdXBlci5jLTI2NS1cdCAqIGRvbiYjMzk7dCBuZWVkIGxvY2tzIGhlcmUuXG4tLVxuZnMvc3VwZXIuYz0zMzY9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbi0tXG5mcy9zdXBlci5jLTQwNS1cdHMtXHUwMDNlc19zaHJpbmstXHUwMDNlc2Nhbl9vYmplY3RzID0gc3VwZXJfY2FjaGVfc2NhbjtcbmZzL3N1cGVyLmM6NDA2Olx0cy1cdTAwM2VzX3Nocmluay1cdTAwM2Vjb3VudF9vYmplY3RzID0gc3VwZXJfY2FjaGVfY291bnQ7XG5mcy9zdXBlci5jLTQwNy1cdHMtXHUwMDNlc19zaHJpbmstXHUwMDNlYmF0Y2ggPSAxMDI0O1xuLS1cbmZzL3N1cGVyLmM9MTkzNT1pbnQgdmZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9zdXBlci5jLTE5NjMtXHQgKiBzdXBlcl93YWtlKCkgY29udGFpbnMgYSBtZW1vcnkgYmFycmllciB3aGljaCBhbHNvIGNhcmUgb2ZcbmZzL3N1cGVyLmM6MTk2NDpcdCAqIG9yZGVyaW5nIGZvciBzdXBlcl9jYWNoZV9jb3VudCgpLiBXZSBwbGFjZSBpdCBiZWZvcmUgc2V0dGluZ1xuZnMvc3VwZXIuYy0xOTY1LVx0ICogU0JfQk9STiBhcyB0aGUgZGF0YSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHR3byBmdW5jdGlvbnMgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRhcmdldCBGdW5jdGlvbiBMaXN0KioKCk9rYXksIHNvIGBzdXBlcl9jYWNoZV9jb3VudGAgc2VlbXMgZmluZSwgYnV0IGdldHRpbmcgYXQgc2hyaW5rZXJzIGRpcmVjdGx5IGlzIHByb3ZpbmcgZGlmZmljdWx0LiBJIHRoaW5rIGB2ZnNfZ2V0X3RyZWVgIGlzIGEgYmV0dGVyIGVudHJ5IHBvaW50LCBlc3BlY2lhbGx5IHNpbmNlIGl0IHJlbGF0ZXMgdG8gbW91bnQgcGF0aHMgZGlyZWN0bHkuIExldCYjMzk7cyBhZGQgdGhhdC4KCkhvbGQgb24sIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCBpcyBjYWxsZWQgZHVyaW5nIGZpbGUgb3BlbmluZywgc28gaXQmIzM5O3MgYSBzdXBlciBob3QgcGF0aCEgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gUmVtb3ZlIGl0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsuIGBzeXNfaW9fZ2V0ZXZlbnRzYD8gSXQmIzM5O3MgYSBzcGVjaWZpYyBzeXNjYWxsLCBub3QgYSBnZW5lcmljIGhvdCBwYXRoLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5LiBgcGlkZmRfaW9jdGxgPyBTcGVjaWZpYyB0byBwaWRmZC4gR29vZC4gYHByb2NfdWlkX21hcF93cml0ZWA/IFVzZXIgbmFtZXNwYWNlIHNwZWNpZmljLiBGaW5lLiBIb3cgYWJvdXQgYGlzb3RwX3NlbmRtc2dgPyBTcGVjaWZpYyB0byBDQU4gSVNPVFAuIFllcC4gYHRjZl9nYWN0X2FjdGA/IFRDIEdBQ1Qgc3BlY2lmaWMuIE9rYXkuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgPyBTcGVjaWZpYyB0byBTT19SRVVTRVBPUlQsIGl0JiMzOTtzIGZpbmUuIGByZWdpc3Rlcl92bGFuX2RldmA/IFZMQU4gc3BlY2lmaWMuIFl1cC4gRmluYWxseSwgYGV4dDRfcmVzaXplX2ZzYD8gRXh0NCByZXNpemUsIHBlcmZlY3QuCgpTbyB0aGUgcmVmaW5lZCBsaXN0IGlzOgoKKiAgIGBleHQ0X3Jlc2l6ZV9mc2AKKiAgIGBwaWRmZF9pb2N0bGAKKiAgIGBwcm9jX3VpZF9tYXBfd3JpdGVgCiogICBgaXNvdHBfc2VuZG1zZ2AKKiAgIGB0Y2ZfZ2FjdF9hY3RgCiogICBgc3lzX2lvX2dldGV2ZW50c2AKKiAgIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgCiogICBgcmVnaXN0ZXJfdmxhbl9kZXZgCiogICBgdmZzX2dldF90cmVlYAoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBgdmZzX2dldF90cmVlYC4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBtb3VudGluZyBmaWxlc3lzdGVtcywgd2hpY2ggaXMgaW5mcmVxdWVudCwgc28gaXQmIzM5O3Mgbm90IGEgc3VwZXIgaG90IHBhdGguIEdvb2QuCgpPa2F5LCBsZXQmIzM5O3MgcmUtZXZhbHVhdGUgdGhlIG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpcyBjYWxsZWQgZHVyaW5nIHBhY2tldCByZWNlcHRpb24gd2l0aCBTT19SRVVTRVBPUlQsIHNvIGl0JiMzOTtzIG9ubHkgYSBob3QgcGF0aCB3aXRoIHRoYXQgc29ja2V0IG9wdGlvbiBjb25maWd1cmVkLCBidXQgc3RpbGwgc3BlY2lmaWMgZW5vdWdoLiBgdGNmX2dhY3RfYWN0YCBpcyBmb3IgcGFja2V0IHByb2Nlc3Npbmcgd2hlbiBHQUNUIGlzIGNvbmZpZ3VyZWQsIHNwZWNpZmljLiBgc3lzX2lvX2dldGV2ZW50c2AgaXMgYSBzeXN0ZW0gY2FsbCwgbm90IGdlbmVyaWMuIGBwaWRmZF9pb2N0bGAgaXMgc3BlY2lmaWNhbGx5IGZvciBwaWRmZC4gYHByb2NfdWlkX21hcF93cml0ZWAgaXMgZm9yIHVzZXIgbmFtZXNwYWNlLiBgaXNvdHBfc2VuZG1zZ2AgaXMgZm9yIENBTiBJU09UUC4gYHJlZ2lzdGVyX3ZsYW5fZGV2YCBpcyBmb3IgVkxBTiwgYW5kIGBleHQ0X3Jlc2l6ZV9mc2AgaXMgZm9yIHRoZSBleHQ0IHJlc2l6ZS4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEkgdGhpbmsgSSBuZWVkOiBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX1VTRVJfTlNgLCBgQ09ORklHX0NBTl9JU09UUGAsIGBDT05GSUdfTkVUX0FDVF9HQUNUYCwgYENPTkZJR19BSU9gLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC4KCk9oLCBJIGZvcmdvdC4gYENPTkZJR19DQU5fSVNPVFBgIGhhcyBhIHBhcmVudCBjb25maWc6IGBDT05GSUdfQ0FOYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9jYW4vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBTl9JU09UUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQ0FOX0lTT1RQIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ0FOX0lTT1RQYC4gTXkgZ28tdG8gaXMgdXN1YWxseSB0aGUgYEtjb25maWdgIGZpbGVzLCBzbyBsZXQmIzM5O3MgbmF2aWdhdGUgdG8gYG5ldC9jYW4vS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGBDQU5fSVNPVFBgIGlzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGl0IHJlbGllcyBvbi4gSSBleHBlY3QgSSYjMzk7bGwgZmluZCBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG9vLCBhbmQgcG9zc2libHkgc29tZSBgZGVmYXVsdGAgdmFsdWVzIG9yIGBoZWxwYCB0ZXh0IHRoYXQgZ2l2ZSBtZSBjb250ZXh0LiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgQ0FOX0lTT1RQYCBpcyBzZWxlY3RlZCwgYW5kIGNvbnZlcnNlbHksIHdoYXQgbWlnaHQgbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBJICpkb24mIzM5O3QqIHdhbnQgaXQuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSwgYW5kIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0lTT1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXCYjMzQ7bmV0L2Nhbi9qMTkzOS9LY29uZmlnXCYjMzQ7XG5uZXQvY2FuL0tjb25maWctNTgtXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxubmV0L2Nhbi9LY29uZmlnLTYwLVx0dHJpc3RhdGUgXCYjMzQ7SVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENBTl9JU09UUCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zIGFib3V0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpY3MgcmVsYXRlZCB0byBgY29uZmlnIENBTl9JU09UUGAuIFRoaXMgbGluZSBpcyBjcnVjaWFsLCBhbmQgaXQmIzM5O3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGUgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgY29uZmlndXJlZCwgd2hhdCBmb2xsb3dzIHRoaXMgbGluZSwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgYXJlYSBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgSVNPLVRQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLCBzbyBsb29raW5nIGRlZXBlciBhdCB3aGF0IGlzIGRlZmluZWQgaXMgZXNzZW50aWFsLiBJdCBjb3VsZCBpbnZvbHZlIHBhcmFtZXRlcnMgZm9yIGFkZHJlc3NpbmcsIGZsb3cgY29udHJvbCwgZnJhZ21lbnRhdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcuIFdpdGhvdXQgdGhhdCBjb250ZXh0LCBhbnkgYnJvYWRlciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBwcmVtYXR1cmUgYW5kIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGZvcm0gYSByZWxpYWJsZSBvcGluaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fSVNPVFAoLipcXG4pezEsNX0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUyNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIENBTiBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBDQU4gbmV0d29yayBjb25maWd1cmF0aW9uLiBUaGUgYG5ldC9jYW4vS2NvbmZpZ2AgZmlsZSBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgQ0FOIGZ1bmN0aW9uYWxpdGllcyBhcmUgZGVmaW5lZCwgYW5kIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHRoZSBvcHRpb25zIEkgbmVlZCB0byBleGFtaW5lLiBVc2luZyBgcmVhZC1maWxlYCBvbiB0aGF0IHNwZWNpZmljIEtjb25maWcgZmlsZSBpcyB0aGUgbW9zdCBlZmZpY2llbnQgZmlyc3Qgc3RlcCB0byBnZXQgYW4gb3ZlcnZpZXcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCBhcmUgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIG9mZmVyIG1lIGEgc3RyYWlnaHRmb3J3YXJkIG91dGxpbmUgb2YgdGhlIGhpZ2gtbGV2ZWwgQ0FOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGVzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFx0ICBieSB0aGUgbmV0bGluayBjb25maWd1cmF0aW9uIGludGVyZmFjZSBrbm93biBlLmcuIGZyb20gaXB0YWJsZXMuXG4gIDU2Olx0XG4gIDU3Olx0c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBDQU5fSVNPVFBcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgQ0FOIFRyYW5zcG9ydCBQcm90b2NvbHMgb2ZmZXIgc3VwcG9ydCBmb3Igc2VnbWVudGVkIFBvaW50LXRvLVBvaW50XG4gIDYzOlx0XHQgIGNvbW11bmljYXRpb24gYmV0d2VlbiBDQU4gbm9kZXMgdmlhIHR3byBkZWZpbmVkIENBTiBJZGVudGlmaWVycy5cbiAgNjQ6XHRcdCAgVGhpcyBwcm90b2NvbCBkcml2ZXIgaW1wbGVtZW50cyBzZWdtZW50ZWQgZGF0YSB0cmFuc2ZlcnMgZm9yIENBTiBDQ1xuICA2NTpcdFx0ICAoYWthIENsYXNzaWNhbCBDQU4sIENBTiAyLjBCKSBhbmQgQ0FOIEZEIGZyYW1lIHR5cGVzIHdoaWNoIHdlcmVcbiAgNjY6XHRcdCAgaW50cm9kdWNlZCB3aXRoIElTTyAxNTc2NS0yOjIwMTYuXG4gIDY3Olx0XHQgIEFzIENBTiBmcmFtZXMgY2FuIG9ubHkgdHJhbnNwb3J0IGEgc21hbGwgYW1vdW50IG9mIGRhdGEgYnl0ZXNcbiAgNjg6XHRcdCAgKG1heC4gOCBieXRlcyBmb3IgQ0FOIENDIGFuZCBtYXguIDY0IGJ5dGVzIGZvciBDQU4gRkQpIHRoaXNcbiAgNjk6XHRcdCAgc2VnbWVudGF0aW9uIGlzIG5lZWRlZCB0byB0cmFuc3BvcnQgbG9uZ2VyIFByb3RvY29sIERhdGEgVW5pdHMgKFBEVSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwMjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDQU5fSVNPVFAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDQU5fSVNPVFBgIGFuZCBJIHNlZSBpdCYjMzk7cyBuZXN0ZWQgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGhpbiB0aGUgYENBTmAgbWVudS4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhhdC4gTm93LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGBDQU5gIG1lbnUgaXRzZWxmIGlzIG5lY2Vzc2FyeS4gV2UgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGBDQU5gIGluZnJhc3RydWN0dXJlIGlzLCBpbiBmYWN0LCBuZWVkZWQgYmVmb3JlIGFzc3VtaW5nIGBDQU5fSVNPVFBgIGlzIHJlbGV2YW50LiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgY2xhcmlmeSBpdHMgcm9sZSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnLTUtXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGUgbmVlZCBmb3IgYENBTmAgY2xlYXJseS4gTm93LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBsZXQmIzM5O3MgdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9BQ1RfR0FDVGAuIFVuZGVyc3RhbmRpbmcgd2hhdCBgTkVUX0FDVF9HQUNUYCByZWxpZXMgdXBvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBsYW5kc2NhcGUgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMgZm9yIGBDQU5gLiBUaGlzIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgdW5mb3Jlc2VlbiBjb25mbGljdHMgb3IgcmVkdW5kYW50IGVmZm9ydHMgZG93biB0aGUgbGluZS4gSXTigJlzIGFib3V0IGJlaW5nIGVmZmljaWVudCBhbmQga25vd2luZyB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBtYWtpbmcgYW55IGFzc3VtcHRpb25zIG9yIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFxuIDcyNjpcdGNvbmZpZyBORVRfQUNUX0dBQ1RcbiA3Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgYWN0aW9uc1wmIzM0O1xuIDcyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDcyOTpcdFx0aGVscFxuIDczMDpcdFx0ICBTYXkgWSBoZXJlIHRvIHRha2UgZ2VuZXJpYyBhY3Rpb25zIHN1Y2ggYXMgZHJvcHBpbmcgYW5kXG4gNzMxOlx0XHQgIGFjY2VwdGluZyBwYWNrZXRzLlxuIDczMjpcdFxuIDczMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzM0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfZ2FjdC5cbiA3MzU6XHRcbiA3MzY6XHRjb25maWcgR0FDVF9QUk9CXG4gNzM3Olx0XHRib29sIFwmIzM0O1Byb2JhYmlsaXR5IHN1cHBvcnRcJiMzNDtcbiA3Mzg6XHRcdGRlcGVuZHMgb24gTkVUX0FDVF9HQUNUXG4gNzM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjUwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBORVRfQ0xTX0FDVGAgaXMgYSBrZXkgY29tcG9uZW50IGhlcmUsIG5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBJIGFsc28gc2VlIGBHQUNUX1BST0JgIGlzIG1vZGlmaWVkIGluIHRoZSBjb2RlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IGludm9sdmVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBwYXRjaCB0byBtYWtlIHN1cmUuCgpBaCwgeWVzLCBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0OgoKYGBgYwojaWZkZWYgQ09ORklHX0dBQ1RfUFJPQgpzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KQpgYGAKClRoZSBgI2lmZGVmIENPTkZJR19HQUNUX1BST0JgIGNvbmZpcm1zIG15IGluaXRpYWwgb2JzZXJ2YXRpb24uIGBHQUNUX1BST0JgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gTm93LCB0aW1lIHRvIG1vdmUgb24gYW5kIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZMQU5fODAyMVFgIGluIHJlbGF0aW9uIHRvIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBWTEFOXzgwMjFRXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgU2VsZWN0IHRoaXMgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY3JlYXRlIDgwMi4xUSBWTEFOIGludGVyZmFjZXNcbiAgMTA6XHRcdCAgb24geW91ciBFdGhlcm5ldCBpbnRlcmZhY2VzLiA4MDIuMVEgVkxBTiBzdXBwb3J0cyBhbG1vc3RcbiAgMTE6XHRcdCAgZXZlcnl0aGluZyBhIHJlZ3VsYXIgRXRoZXJuZXQgaW50ZXJmYWNlIGRvZXMsIGluY2x1ZGluZ1xuICAxMjpcdFx0ICBmaXJld2FsbGluZywgYnJpZGdpbmcsIGFuZCBvZiBjb3Vyc2UgSVAgdHJhZmZpYy4gWW91IHdpbGwgbmVlZFxuICAxMzpcdFx0ICB0aGUgJiMzOTtpcCYjMzk7IHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxuICAxNDpcdFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XG4gIDE1Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IENoZWNrOiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gSSBzZWUgbm8gaW1tZWRpYXRlbHkgb2J2aW91cywgZGlyZWN0IGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZS4gR29vZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyAqYSBiaXQqLCBidXQgd2Uga25vdyBiZXR0ZXIgdGhhbiB0byBhc3N1bWUgdG9vIG11Y2ggYXQgdGhpcyBzdGFnZS4KClRpbWUgdG8gZGVsdmUgYSBsaXR0bGUgZGVlcGVyIGFuZCBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBoaWRkZW4gaXNzdWVzLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEFJT2AuIEl0JiMzOTtzIGEga2V5IHBpZWNlLCBhbmQgaXRzIGludGVyYWN0aW9ucyBhcmUgb2Z0ZW4gd2hlcmUgdGhpbmdzIGJlY29tZSBzdWJ0bHkgaW50ZXJjb25uZWN0ZWQgb3IgY2F1c2UgaGVhZGFjaGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTE1Olx0XG4xOTE2Olx0Y29uZmlnIEFJT1xuMTkxNzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTE4Olx0XHRkZWZhdWx0IHlcbjE5MTk6XHRcdGhlbHBcbjE5MjA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXG4xOTIxOlx0XHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xuMTkyMjpcdFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cbjE5MjM6XHRcbjE5MjQ6XHRjb25maWcgSU9fVVJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUgLSBVU0VSX05TKioKClJpZ2h0LCBubyBpbW1lZGlhdGUsIG9idmlvdXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFyZSBzY3JlYW1pbmcgYXQgbWUuIFRoYXQmIzM5O3MgZ29vZCwgYSBjbGVhbiBzbGF0ZSB0byBiZWdpbiB3aXRoIGlzIGFsd2F5cyBwcmVmZXJhYmxlLiBCdXQgbGV0JiMzOTtzIG5vdCBnZXQgY29tcGxhY2VudC4gTXkgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgJiMzNDtubyBhcHBhcmVudCBkZXBlbmRlbmNpZXMmIzM0OyBvZnRlbiBtYXNrcyBzb21ldGhpbmcgc3VidGxlLCBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBvbmx5IHJlbGV2YW50IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGd1dHMgb2YgdGhlIHByb2JsZW0sIGlzIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiBvZiBhbnl0aGluZyByZWxhdGVkIHRvIGBVU0VSX05TYC4gSXTigJlzIGEgY29tbW9uIGFyZWEgZm9yIGhpZGRlbiBjb21wbGV4aXR5LCBlc3BlY2lhbGx5IGluIHN5c3RlbXMgaW52b2x2aW5nIGNvbnRhaW5lcml6YXRpb24sIHNlY3VyaXR5LCBvciBwcml2aWxlZ2Ugc2VwYXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSwgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgcmVnYXJkaW5nIHVzZXIgbmFtZXNwYWNlcywgYW5kIGhvdyB0aG9zZSBjb25maWd1cmF0aW9ucyBtaWdodCBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWxldmFudCBjb21wb25lbnQuIEkgbmVlZCB0byBpZGVudGlmeSBpZiBhbmQgaG93IHVzZXIgbmFtZXNwYWNlIG1hcHBpbmcgYWZmZWN0cyBwZXJtaXNzaW9ucywgcmVzb3VyY2UgbGltaXRzLCBvciBpbnRlcmFjdGlvbiB3aXRoIGtlcm5lbCBmZWF0dXJlcy4gSeKAmWxsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHJlbGF0ZSB0byB0aGlzIGNvbXBvbmVudCwgZm9jdXNpbmcgb24gdGhlIHNldHRpbmdzIGZvciBgVVNFUl9OU2AuIFRoZW4sIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhvc2Ugd2l0aCB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24gYW5kIGFueSByZWxhdGVkIHNlY3VyaXR5IGFkdmlzb3JpZXMgb3Iga25vd24gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGNhcmVmdWwgYW5hbHlzaXMgc2hvdWxkIHRlbGwgbWUgd2hldGhlciBhbnkgaXNzdWVzIGFyZSB3YWl0aW5nIHRvIG1hbmlmZXN0IHRoZW1zZWx2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDQ1Olx0XG4xNDQ2Olx0Y29uZmlnIFVTRVJfTlNcbjE0NDc6XHRcdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbjE0NDg6XHRcdGRlZmF1bHQgblxuMTQ0OTpcdFx0aGVscFxuMTQ1MDpcdFx0ICBUaGlzIGFsbG93cyBjb250YWluZXJzLCBpLmUuIHZzZXJ2ZXJzLCB0byB1c2UgdXNlciBuYW1lc3BhY2VzXG4xNDUxOlx0XHQgIHRvIHByb3ZpZGUgZGlmZmVyZW50IHVzZXIgaW5mbyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuXG4xNDUyOlx0XG4xNDUzOlx0XHQgIFdoZW4gdXNlciBuYW1lc3BhY2VzIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgaXQgaXNcbjE0NTQ6XHRcdCAgcmVjb21tZW5kZWQgdGhhdCB0aGUgTUVNQ0cgb3B0aW9uIGFsc28gYmUgZW5hYmxlZCBhbmQgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSDigJMgbm8gaW1tZWRpYXRlLCBleHBsaWNpdCBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIEdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIGF0IGxlYXN0IGluaXRpYWxseS4gTm93LCBnaXZlbiBteSBhcmVhIG9mIGV4cGVydGlzZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGBFWFQ0X0ZTYCBmZWF0dXJlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IG90aGVyIGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBjb21tb25seSB1c2VkIGFsb25nc2lkZSBFWFQ0LiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBzdG9yYWdlIHRlY2hub2xvZ3ksIGFuZCBJIG5lZWQgYSBwcmVjaXNlIHBpY3R1cmUgb2YgaXRzIHN1cnJvdW5kaW5nIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBkb24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBpbW1lZGlhdGUsIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiBlYWNoIG90aGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGZpdCB0b2dldGhlci4gU28sIG15IGN1cnJlbnQgbGlzdCBvZiBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlciBpczogYEVYVDRfRlNgLCBgVVNFUl9OU2AsIGBDQU5gLCBgQ0FOX0lTT1RQYCwgYE5FVF9DTFNfQUNUYCwgYE5FVF9BQ1RfR0FDVGAsIGBHQUNUX1BST0JgLCBgQUlPYCwgYW5kIGBWTEFOXzgwMjFRYC4gVGhleSBhbGwgc2VlbSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkLCBidXQgSSBrbm93IGJldHRlciB0aGFuIHRvIGFzc3VtZSBjb21wbGV0ZSBpbmRlcGVuZGVuY2UgYXQgdGhpcyBwb2ludC4KCkhvbGQgb24gYSBzZWNvbmQsIHNvbWV0aGluZyBqdXN0IHBpbmdlZCBteSByYWRhci4gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgYENPTkZJR19DQU5gLiBJIHJlY2FsbCB0aGF0IGBDQU5gIGlzIHR5cGljYWxseSBwcmVzZW50ZWQgYXMgYSBtZW51IGVudHJ5IGluIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCdXQgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpZiB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50ICYjMzQ7Q0FOJiMzNDsgaXMgYWxzbyBpdHNlbGYgYSBkaXN0aW5jdCBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMgbm93LCBhcyB0aGlzIGNvdWxkIGltcGFjdCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJvY2Vzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZy01LVxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cbm5ldC9jYW4vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZz0yMj1pZiBDQU5cbm5ldC9jYW4vS2NvbmZpZy0yMy1cbm5ldC9jYW4vS2NvbmZpZzoyNDpjb25maWcgQ0FOX1JBV1xubmV0L2Nhbi9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7UmF3IENBTiBQcm90b2NvbCAocmF3IGFjY2VzcyB3aXRoIENBTi1JRCBmaWx0ZXJpbmcpXCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnLTMzLVxubmV0L2Nhbi9LY29uZmlnOjM0OmNvbmZpZyBDQU5fQkNNXG5uZXQvY2FuL0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNhc3QgTWFuYWdlciBDQU4gUHJvdG9jb2wgKHdpdGggY29udGVudCBmaWx0ZXJpbmcpXCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnLTQ1LVxubmV0L2Nhbi9LY29uZmlnOjQ2OmNvbmZpZyBDQU5fR1dcbm5ldC9jYW4vS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O0NBTiBHYXRld2F5L1JvdXRlciAod2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24pXCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZy01OC1cbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXG5uZXQvY2FuL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDMwCgkJCQkJCQlvdXRwdXQ6IDI5NQoJCQkJCQkJdGhvdWdodHM6IDg3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVudWNvbmZpZyBDQU5gIGVudHJ5LiBUaGF0IG1lYW5zIGBDQU5gIGlzIHRoZSBjb25maWd1cmF0aW9uIG5hbWUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBmb2N1cyBzeW1ib2xzIEkgbmVlZCB0byBkZWZpbmUuIEkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBleHQ0X3Jlc2l6ZV9mc2AsIGBwaWRmZF9pb2N0bGAsIGBwcm9jX3VpZF9tYXBfd3JpdGVgLCBgaXNvdHBfc2VuZG1zZ2AsIGB0Y2ZfZ2FjdF9hY3RgLCBgc3lzX2lvX2dldGV2ZW50c2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBhbmQgYHZmc19nZXRfdHJlZWAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHN5c19pb19nZXRldmVudHNgLiBJIGtub3cgU3l6a2FsbGVyIHVzZXMgYGlvX2dldGV2ZW50c2AsIGJ1dCB0aGUga2VybmVsIHN5bWJvbCBpcyBgc3lzX2lvX2dldGV2ZW50c2AuIEFjdHVhbGx5LCBvbiB4ODYsIGl0IG1pZ2h0IGJlIGBfX3g2NF9zeXNfaW9fZ2V0ZXZlbnRzYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGBzeXNfaW9fZ2V0ZXZlbnRzYCBpcyB0aGUgbW9zdCBkaXJlY3QuIFNob3VsZCBJIHVzZSBgc3lzX2lvX2dldGV2ZW50c2Agb3IgYGFpb19yZWFkX2V2ZW50c19yaW5nYD8gIExldCYjMzk7cyBzdGljayB3aXRoIGBzeXNfaW9fZ2V0ZXZlbnRzYCAtIFN5emthbGxlciBjYW4gaGFuZGxlIHRoZSBtYXRjaCB0byB0aGUgc3lzY2FsbC4gQWN0dWFsbHksIEkgd2FzIG1vZGlmeWluZyBhIHN0YXRpYyBmdW5jdGlvbiBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgIGluIHRoZXJlIGFzIHdlbGwuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQ0FOYCwgYENBTl9JU09UUGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0dBQ1RgLCBgR0FDVF9QUk9CYCwgYEFJT2AsIGFuZCBgVkxBTl84MDIxUWAuIEFueXRoaW5nIGVsc2UgdG8gY29uc2lkZXI/CgpJJiMzOTttIGFsc28gbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHRvIGBmcy9maWxlLmNgIHdpdGhpbiBgZXhwYW5kX2ZkdGFibGVgLCBgZXhwYW5kX2ZpbGVzYCwgYW5kIGBmZF9pbnN0YWxsYCwgd2hpY2ggYXJlIGhlYXZpbHkgdXNlZCBpbiBgb3BlbmAsIGBzb2NrZXRgLCBhbmQgYHBpcGVgLiBJIGNvdWxkIGFkZCBhIGZvY3VzIHN5bWJvbCwgYnV0IHRoZXNlIGFyZSBzbyBmdW5kYW1lbnRhbCB0aGF0IHRoZXkmIzM5O3JlIGFsbW9zdCBhbHdheXMgaGl0IGFueXdheS4gSSBjb25zaWRlcmVkIGBhbGxvY19mZGAgb3IgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBidXQgSSYjMzk7bSBnb2luZyB0byBvbWl0IHRoZW0gc2luY2UgdGhleSYjMzk7cmUgc3VjaCBjb21tb24gZnVuY3Rpb25zLgoKVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGZzL3BpZGZzLmNgIGFyZSBhcm91bmQgYHBpZGZkX2luZm9gLCBzbyBgcGlkZmRfaW9jdGxgIGlzIGEgZ29vZCBmb2N1cy4KCmBmcy9zdXBlci5jYCBtb2RpZmljYXRpb25zIGludm9sdmUgYHN1cGVyX2NhY2hlX2NvdW50YCwgYW5kIGB2ZnNfZ2V0X3RyZWVgIGlzIHRoZSByaWdodCBmb2N1cy4KCkZvciBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgLCBJJiMzOTt2ZSBnb3QgYG1hcF9pZF9yYW5nZV9kb3duYCwgYG1hcF9pZF9yYW5nZV91cGAsIGBtX3N0YXJ0YCwgYW5kIGBtYXBfd3JpdGVgIGNoYW5nZXMuIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGNhcHR1cmVzIHRoZSByZWxldmFudCBwYXJ0LgoKVGhlIGBsaWIvdnNwcmludGYuY2AgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gYGZpbGxfcHRyX2tleWAgYW5kIGBfX3B0cl90b19oYXNodmFsYCAoZm9yIGAlcGAgZm9ybWF0dGluZykg4oCTIG5vdCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGEgZm9jdXMgc3ltYm9sLgoKYG5ldC84MDIxcS92bGFuLmNgIHVwZGF0ZXMgaW5jbHVkZSBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBzbyBgcmVnaXN0ZXJfdmxhbl9kZXZgIGlzIHRoZSBmb2N1cy4KCkluIGBuZXQvY2FuL2lzb3RwLmNgLCBgaXNvdHBfc2VuZG1zZ2AgaXMgcGVyZmVjdC4KCkxhc3RseSwgYG5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNgIGNoYW5nZXMgaW52b2x2ZSBgX19yZXVzZXBvcnRfYWRkX3NvY2tgLCBgX19yZXVzZXBvcnRfZGV0YWNoX3NvY2tgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYW5kIGByZXVzZXBvcnRfbWlncmF0ZV9zb2NrYC4gSSYjMzk7bGwgdXNlIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGFzIHRoZSByZXByZXNlbnRhdGl2ZS4KCmBuZXQvc2NoZWQvYWN0X2dhY3QuY2AgY29udGFpbnMgYGdhY3RfbmV0X3JhbmRgLCBgZ2FjdF9kZXRlcm1gLCBgdGNmX2dhY3RfaW5pdGAsIGFuZCBgdGNmX2dhY3RfYWN0YCwgc28gYHRjZl9nYWN0X2FjdGAgaXMgdGhlIGFwcHJvcHJpYXRlIGZvY3VzLgoKSSYjMzk7bSBmZWVsaW5nIGdvb2QgYWJvdXQgdGhlc2Ugc2VsZWN0aW9ucy4gSSB0aGluayB0aGlzIGNvdmVycyB0aGUgaW1wb3J0YW50IGFyZWFzLiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9HQUNUJiMzNDssCiAgICAmIzM0O0dBQ1RfUFJPQiYjMzQ7LAogICAgJiMzNDtBSU8mIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcmVzaXplX2ZzJiMzNDssCiAgICAmIzM0O3BpZGZkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Byb2NfdWlkX21hcF93cml0ZSYjMzQ7LAogICAgJiMzNDtpc290cF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjZl9nYWN0X2FjdCYjMzQ7LAogICAgJiMzNDtzeXNfaW9fZ2V0ZXZlbnRzJiMzNDssCiAgICAmIzM0O3JldXNlcG9ydF9zZWxlY3Rfc29jayYjMzQ7LAogICAgJiMzNDtyZWdpc3Rlcl92bGFuX2RldiYjMzQ7LAogICAgJiMzNDt2ZnNfZ2V0X3RyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbW9yeSBiYXJyaWVycyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoZnMsIG5ldCwga2VybmVsLCBsaWIpIGJ5IHJlcGxhY2luZyBwbGFpbiByZWFkcy93cml0ZXMgYW5kIHNtcF9ybWIvd21iIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBjb25jdXJyZW5jeSBzZW1hbnRpY3MsIGZpeGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW1wcm92aW5nIGNvcnJlY3RuZXNzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbG9naWMsIGluY2x1ZGluZyBleHQ0IHJlc2l6aW5nLCBBSU8gZXZlbnQgcmVhZGluZywgdXNlciBuYW1lc3BhY2UgSUQgbWFwcGluZywgQ0FOIElTT1RQIG1lc3NhZ2Ugc2VuZGluZywgYW5kIFNPX1JFVVNFUE9SVCBzb2NrZXQgc2VsZWN0aW9uLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FDVCYjMzQ7LAogICAgJiMzNDtHQUNUX1BST0ImIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtwaWRmZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcm9jX3VpZF9tYXBfd3JpdGUmIzM0OywKICAgICYjMzQ7aXNvdHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y2ZfZ2FjdF9hY3QmIzM0OywKICAgICYjMzQ7c3lzX2lvX2dldGV2ZW50cyYjMzQ7LAogICAgJiMzNDtyZXVzZXBvcnRfc2VsZWN0X3NvY2smIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7dmZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1vcnkgYmFycmllcnMgYWNyb3NzIG11bHRpcGxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGZzLCBuZXQsIGtlcm5lbCwgbGliKSBieSByZXBsYWNpbmcgcGxhaW4gcmVhZHMvd3JpdGVzIGFuZCBzbXBfcm1iL3dtYiB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgY29uY3VycmVuY3kgc2VtYW50aWNzLCBmaXhpbmcgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGltcHJvdmluZyBjb3JyZWN0bmVzcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGxvZ2ljLCBpbmNsdWRpbmcgZXh0NCByZXNpemluZywgQUlPIGV2ZW50IHJlYWRpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIENBTiBJU09UUCBtZXNzYWdlIHNlbmRpbmcsIGFuZCBTT19SRVVTRVBPUlQgc29ja2V0IHNlbGVjdGlvbi4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpcyBhIHJlZmFjdG9yaW5nIHRoYXQgcmVwbGFjZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYigpYCBhbmQgYHNtcF93bWIoKWApIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoYHNtcF9sb2FkX2FjcXVpcmUoKWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCkgYWNyb3NzIHZhcmlvdXMgc3Vic3lzdGVtcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBmaWVsZHMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI4MDg3ZGEzZWE0NThhYmEwYjRlMWQxMjUyOWQwYmQ3YjQwNWVjNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDozNjozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmMKQEAgLTEyMDYsMTMgJiM0MzsxMjA2LDEyIEBAIHN0YXRpYyB2b2lkIGFpb19jb21wbGV0ZShzdHJ1Y3QgYWlvX2tpb2NiICppb2NiKQogCS8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlCiAJICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW4KIAkgKi8KLQlzbXBfd21iKCk7CS8qIG1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqLwotCi0JY3R4LSZndDt0YWlsID0gdGFpbDsKJiM0MzsJV1JJVEVfT05DRShjdHgtJmd0O3RhaWwsIHRhaWwpOwogCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JcmluZy0mZ3Q7dGFpbCA9IHRhaWw7CiYjNDM7CS8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3JpbmctJmd0O3RhaWwsIHRhaWwpOwogCWZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAogCWN0eC0mZ3Q7Y29tcGxldGVkX2V2ZW50cyYjNDM7JiM0Mzs7CkBAIC0xMjg4LDEzICYjNDM7MTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsCiAJLyogQWNjZXNzIHRvIC0mZ3Q7cmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LSZndDtyaW5nX2xvY2suICovCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JdGFpbCA9IHJpbmctJmd0O3RhaWw7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UmIzM5O3ZlIHJlYWQgdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyLCB0aGF0CiAJICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLgomIzQzOwkgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuCiAJICovCi0Jc21wX3JtYigpOwomIzQzOwl0YWlsID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3JpbmctJmd0O3RhaWwpOwogCiAJcHJfZGVidWcoJiMzNDtoJXUgdCV1IG0ldVxuJiMzNDssIGhlYWQsIHRhaWwsIGN0eC0mZ3Q7bnJfZXZlbnRzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCA3MjRhMjdlOGJlNjEzLi5kNzBiOWNiMDkxNTUzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzU0MiwxNiAmIzQzOzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpCiB9CiAKIC8qCi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlCi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpCi0gKiBpbiByZXNpemUuYwomIzQzOyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy4KICAqLwogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JZXh0NF9ncm91cF90CW5ncm91cHMgPSBFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQ7Ci0KLQlzbXBfcm1iKCk7Ci0JcmV0dXJuIG5ncm91cHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CXJldHVybiBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihzYiktJmd0O3NfZ3JvdXBzX2NvdW50KTsKIH0KIAogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTg5OSwxMCAmIzQzOzg5OSw4IEBAIHN0YXRpYyBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoCiAKIAkvKiBub24tZXh0ZW50IGZpbGVzIGFyZSBsaW1pdGVkIHRvIGxvdyBibG9ja3MvZ3JvdXBzICovCiAJaWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtJmd0O2FjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkKLQkJbmdyb3VwcyA9IEVYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzOwotCi0JLyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqLwotCXNtcF9ybWIoKTsKJiM0MzsJCS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CQluZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO0VYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzKTsKIAogCXJldHVybiBuZ3JvdXBzOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmMKaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9yZXNpemUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Jlc2l6ZS5jCkBAIC0xNDYyLDExICYjNDM7MTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqCiAJICogVGhlIHByZWNpc2UgcnVsZXMgd2UgdXNlIGFyZToKIAkgKgotCSAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsCi0JICogICBkZXBlbmRlbnQgZGF0YSBhbmQgYmVmb3JlIG1vZGlmeWluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICAgYWZ0ZXIgYWxsIGRlcGVuZGVudCBkYXRhIGhhcyBiZWVuIHVwZGF0ZWQKIAkgKgotCSAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3VwcwotCSAqICAgY291bnQgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KJiM0MzsJICogKiBSZWFkZXJzIG11c3QgdXNlIGFuIGFjcXVpcmUgbG9hZCB3aGVuIHJlYWRpbmcgdGhlIGdyb3VwcwomIzQzOwkgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KIAkgKgogCSAqIE5CLiBUaGVzZSBydWxlcyBjYW4gYmUgcmVsYXhlZCB3aGVuIGNoZWNraW5nIHRoZSBncm91cCBjb3VudAogCSAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrCkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0CiAJICogYWxsb2NhdGlvbi4KIAkgKi8KLQlzbXBfd21iKCk7CiAKIAkvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqLwotCXNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0Mzs9IGZsZXhfZ2QtJmd0O2NvdW50OwotCXNiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzID0gbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCi0JCQkoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICBzYmktJmd0O3NfZ3JvdXBzX2NvdW50ICYjNDM7IGZsZXhfZ2QtJmd0O2NvdW50KTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzLAomIzQzOwkJCSAgbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7CiAKIAkvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpcwogCSAqIGFjdGl2ZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZS5jCkBAIC0yNzMsOCAmIzQzOzI3Myw2IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZkdGFibGUoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucikKIAlyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtJmd0O2ZkdCwgbmV3X2ZkdCk7CiAJaWYgKGN1cl9mZHQgIT0gJmFtcDtmaWxlcy0mZ3Q7ZmR0YWIpCiAJCWNhbGxfcmN1KCZhbXA7Y3VyX2ZkdC0mZ3Q7cmN1LCBmcmVlX2ZkdGFibGVfcmN1KTsKLQkvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqLwotCXNtcF93bWIoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEzLDcgJiM0MzszMTEsOCBAQCBzdGF0aWMgaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCS8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi8KIAlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAllcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7Ci0JZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOwomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTsKIAogCXdha2VfdXBfYWxsKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV93YWl0KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC02ODUsMTMgJiM0Mzs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpCiAJCXJldHVybjsKIAogCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKLQlpZiAodW5saWtlbHkoZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcykpIHsKJiM0MzsJLyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CiAJCWZkX2luc3RhbGxfc2xvd3BhdGgoZmQsIGZpbGUpOwogCQlyZXR1cm47CiAJfQotCS8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqLwotCXNtcF9ybWIoKTsKIAlmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtJmd0O2ZkdCk7CiAJVkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LSZndDtmZFtmZF0pICE9IE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSwgZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuYwppbmRleCBhNmE2NDNmMTVkMDhhLi4yY2QwZmFiNzMxODBlIDEwMDY0NAotLS0gYS9mcy9waWRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmMKQEAgLTM5Myw4ICYjNDM7MzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAKIAlhdHRyID0gUkVBRF9PTkNFKHBpZC0mZ3Q7YXR0cik7CiAJaWYgKG1hc2sgJmFtcDsgUElERkRfSU5GT19FWElUKSB7Ci0JCWlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewogCQkJa2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7CiAjaWZkZWYgQ09ORklHX0NHUk9VUFMKIAkJCWtpbmZvLmNncm91cGlkID0gYXR0ci0mZ3Q7Y2dyb3VwaWQ7CkBAIC00MDUsOCAmIzQzOzQwNCw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCX0KIAogCWlmIChtYXNrICZhbXA7IFBJREZEX0lORk9fQ09SRURVTVApIHsKLQkJaWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKIAkJCWtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFOwogCQkJa2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItJmd0O2NvcmVkdW1wX21hc2s7CiAJCQlraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLSZndDtjb3JlZHVtcF9zaWduYWw7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li41ODYwZGFlYTZkNDA1IDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTI2NywxMiAmIzQzOzI2NywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIAkgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZwogCSAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXQKIAkgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVjawotCSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXMKLQkgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuCiYjNDM7CSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgYWNxdWlyZSBpcyBtYXRjaGVkCiYjNDM7CSAqIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gc3VwZXJfd2FrZSgpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuCiAJICovCi0JaWYgKCEoc2ItJmd0O3NfZmxhZ3MgJmFtcDsgU0JfQk9STikpCiYjNDM7CWlmICghKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzYi0mZ3Q7c19mbGFncykgJmFtcDsgU0JfQk9STikpCiAJCXJldHVybiAwOwotCXNtcF9ybWIoKTsKIAogCWlmIChzYi0mZ3Q7c19vcCAmYW1wOyZhbXA7IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyAmYW1wOyZhbXA7CiAJICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwppbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwpAQCAtMzE3LDkgJiM0MzszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjbwogCiBzdGF0aWMgdTMyIG1hcF9pZF9yYW5nZV9kb3duKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCXN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50OwotCXVuc2lnbmVkIGV4dGVudHMgPSBtYXAtJmd0O25yX2V4dGVudHM7Ci0Jc21wX3JtYigpOwogCiAJaWYgKGV4dGVudHMgJmx0Oz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykKIAkJZXh0ZW50ID0gbWFwX2lkX3JhbmdlX2Rvd25fYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC0zODMsOSAmIzQzOzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50CiAKIHUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfdXBfYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC02NzYsOSAmIzQzOzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsCiAJCSAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlsb2ZmX3QgcG9zID0gKnBwb3M7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAocG9zICZndDs9IGV4dGVudHMpCiAJCXJldHVybiBOVUxMOwpAQCAtOTY3LDkgJiM0Mzs5NjcsMTEgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCSAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdAogCSAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLgogCSAqCi0JICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGUKLQkgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBjcmF6eQotCSAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuCiYjNDM7CSAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50CiYjNDM7CSAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50CiYjNDM7CSAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2UKJiM0MzsJICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZgomIzQzOwkgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuCiAJICovCiAJbXV0ZXhfbG9jaygmYW1wO3VzZXJuc19zdGF0ZV9tdXRleCk7CiAKQEAgLTEwOTgsOCAmIzQzOzExMDAsOCBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCW1hcC0mZ3Q7Zm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDsKIAkJbWFwLSZndDtyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlOwogCX0KLQlzbXBfd21iKCk7Ci0JbWFwLSZndDtucl9leHRlbnRzID0gbmV3X21hcC5ucl9leHRlbnRzOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDttYXAtJmd0O25yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7CiAKIAkqcHBvcyA9IGNvdW50OwogCXJldCA9IGNvdW50OwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBlMjg1ZThiYzQ3MTJhLi5kNmYyMzVlMTQzYjcyIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdnNwcmludGYuYwpAQCAtNzYyLDkgJiM0Mzs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZAogewogCWdldF9yYW5kb21fYnl0ZXMoJmFtcDtwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpOwogCi0JLyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi8KLQlzbXBfd21iKCk7Ci0JV1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCkBAIC03ODEsMTIgJiM0Mzs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KQogewogCXVuc2lnbmVkIGxvbmcgaGFzaHZhbDsKIAotCWlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCi0Jc21wX3JtYigpOwotCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJaGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgJmFtcDtwdHJfa2V5KTsKIAkvKgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggMmQyZWZiODc3OTc1ZC4uZTM0YWRhMGNjZWFjZiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC03MCwxMCAmIzQzOzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJaWYgKGFycmF5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCS8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovCi0Jc21wX3dtYigpOwotCi0JdmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0gPSBhcnJheTsKJiM0MzsJLyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCBjNDFjYWFmOTQwOTVmLi42ZGI3MTcyYmRhYWNjIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTU2LDExICYjNDM7NTYsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTsKIAotCWFycmF5ID0gdmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF0KLQkJCQkgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTsKLQotCS8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovCi0Jc21wX3JtYigpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqLwomIzQzOwlhcnJheSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDt2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQomIzQzOwkJCQkgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSk7CiAKIAlyZXR1cm4gYXJyYXkgPyBhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0gOiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jCmluZGV4IDE1NTUzMGFlZGNlMmUuLjExYjY1M2JhN2MxMDkgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vaXNvdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2lzb3RwLmMKQEAgLTExNTYsOCAmIzQzOzExNTYsOCBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAlteV9nZW4gPSBpc290cF9pbmNfdHhfZ2VuKFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSk7CiAJaXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuLCBFQ09NTSk7IC8qIHByZXZlbnQgc3RhbGUgc2xvdCBtYXRjaGluZyAqLwogCVdSSVRFX09OQ0Uoc28tJmd0O3R4X2dlbiwgbXlfZ2VuKTsKLQlzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovCi0JV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NFTkRJTkcpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NFTkRJTkcpOwogCVdSSVRFX09OQ0Uoc28tJmd0O2NmZWNobywgMCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jCmluZGV4IDI5OTQ4Y2I0NGI3ZDEuLjZkM2M1MTFkMWRlZjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYwpAQCAtMTI1LDkgJiM0MzsxMjUsOCBAQCBzdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9hZGRfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJIHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpCiB7CiAJcmV1c2UtJmd0O3NvY2tzW3JldXNlLSZndDtudW1fc29ja3NdID0gc2s7Ci0JLyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqLwotCXNtcF93bWIoKTsKLQlyZXVzZS0mZ3Q7bnVtX3NvY2tzJiM0MzsmIzQzOzsKJiM0MzsJLyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3JldXNlLSZndDtudW1fc29ja3MsIHJldXNlLSZndDtudW1fc29ja3MgJiM0MzsgMSk7CiAJcmV1c2Vwb3J0X2dldF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTsKIH0KIApAQCAtMTQwLDcgJiM0MzsxMzksOCBAQCBzdGF0aWMgYm9vbCBfX3JldXNlcG9ydF9kZXRhY2hfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJCXJldHVybiBmYWxzZTsKIAogCXJldXNlLSZndDtzb2Nrc1tpXSA9IHJldXNlLSZndDtzb2Nrc1tyZXVzZS0mZ3Q7bnVtX3NvY2tzIC0gMV07Ci0JcmV1c2UtJmd0O251bV9zb2Nrcy0tOwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmV1c2UtJmd0O251bV9zb2NrcywgcmV1c2UtJmd0O251bV9zb2NrcyAtIDEpOwogCXJldXNlcG9ydF9wdXRfaW5jb21pbmdfY3B1KHNrLCByZXVzZSk7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTU4MywxMSAmIzQzOzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLAogCQlnb3RvIG91dDsKIAogCXByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtJmd0O3Byb2cpOwotCXNvY2tzID0gUkVBRF9PTkNFKHJldXNlLSZndDtudW1fc29ja3MpOwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KJiM0MzsJc29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmV1c2UtJmd0O251bV9zb2Nrcyk7CiAJaWYgKGxpa2VseShzb2NrcykpIHsKLQkJLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KLQkJc21wX3JtYigpOwotCiAJCWlmICghcHJvZyB8fCAhc2tiKQogCQkJZ290byBzZWxlY3RfYnlfaGFzaDsKIApAQCAtNjM0LDEzICYjNDM7NjMyLDExIEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfbWlncmF0ZV9zb2NrKHN0cnVjdCBzb2NrICpzaywKIAlpZiAoIXJldXNlKQogCQlnb3RvIG91dDsKIAotCXNvY2tzID0gUkVBRF9PTkNFKHJldXNlLSZndDtudW1fc29ja3MpOwomIzQzOwkvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi8KJiM0MzsJc29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmV1c2UtJmd0O251bV9zb2Nrcyk7CiAJaWYgKHVubGlrZWx5KCFzb2NrcykpCiAJCWdvdG8gZmFpbHVyZTsKIAotCS8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovCi0Jc21wX3JtYigpOwotCiAJaGFzaCA9IG1pZ3JhdGluZ19zay0mZ3Q7c2tfaGFzaDsKIAlwcm9nID0gcmN1X2RlcmVmZXJlbmNlKHJldXNlLSZndDtwcm9nKTsKIAlpZiAoIXByb2cgfHwgcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1NLX1JFVVNFUE9SVF9TRUxFQ1RfT1JfTUlHUkFURSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwppbmRleCA1NjU4NjBjY2NiYTZkLi5kNGYzOWY5OGUyY2YwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wczsKICNpZmRlZiBDT05GSUdfR0FDVF9QUk9CCiBzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KQogewotCXNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi8KIAlpZiAoZ2V0X3JhbmRvbV91MzJfYmVsb3coZ2FjdC0mZ3Q7dGNmZ19wdmFsKSkKIAkJcmV0dXJuIGdhY3QtJmd0O3RjZl9hY3Rpb247CiAJcmV0dXJuIGdhY3QtJmd0O3RjZmdfcGFjdGlvbjsKQEAgLTM1LDcgJiM0MzszNCw2IEBAIHN0YXRpYyBpbnQgZ2FjdF9kZXRlcm0oc3RydWN0IHRjZl9nYWN0ICpnYWN0KQogewogCXUzMiBwYWNrID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtnYWN0LSZndDtwYWNrZXRzKTsKIAotCXNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi8KIAlpZiAocGFjayAlIGdhY3QtJmd0O3RjZmdfcHZhbCkKIAkJcmV0dXJuIGdhY3QtJmd0O3RjZl9hY3Rpb247CiAJcmV0dXJuIGdhY3QtJmd0O3RjZmdfcGFjdGlvbjsKQEAgLTEzMywxMSAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwKIAlpZiAocF9wYXJtKSB7CiAJCWdhY3QtJmd0O3RjZmdfcGFjdGlvbiA9IHBfcGFybS0mZ3Q7cGFjdGlvbjsKIAkJZ2FjdC0mZ3Q7dGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tJmd0O3B2YWwpOwotCQkvKiBNYWtlIHN1cmUgdGNmZ19wdmFsIGlzIHdyaXR0ZW4gYmVmb3JlIHRjZmdfcHR5cGUKLQkJICogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBnYWN0X25ldF9yYW5kKCkgJmFtcDsgZ2FjdF9kZXRlcm0oKQotCQkgKi8KLQkJc21wX3dtYigpOwotCQlnYWN0LSZndDt0Y2ZnX3B0eXBlICAgPSBwX3Bhcm0tJmd0O3B0eXBlOwomIzQzOwkJLyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGNmX2dhY3RfYWN0KCkuICovCiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2dhY3QtJmd0O3RjZmdfcHR5cGUsIHBfcGFybS0mZ3Q7cHR5cGUpOwogCX0KICNlbmRpZgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Z2FjdC0mZ3Q7dGNmX2xvY2spOwpAQCAtMTYwLDcgJiM0MzsxNTUsOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAKICNpZmRlZiBDT05GSUdfR0FDVF9QUk9CCiAJewotCXUzMiBwdHlwZSA9IFJFQURfT05DRShnYWN0LSZndDt0Y2ZnX3B0eXBlKTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHRjZl9nYWN0X2luaXQoKSAqLwomIzQzOwl1MzIgcHR5cGUgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7Z2FjdC0mZ3Q7dGNmZ19wdHlwZSk7CiAKIAlpZiAocHR5cGUpCiAJCWFjdGlvbiA9IGdhY3RfcmFuZFtwdHlwZV0oZ2FjdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODI3CgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDE1MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IEFjcXVpcmUvUmVsZWFzZSBNZW1vcnkgQmFycmllciBSZWZhY3RvcmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBpbnN0YW5jZXMgb2YgYHNtcF9ybWIoKWAvYHNtcF93bWIoKWAgd2l0aCB0aGUgbW9yZSBtb2Rlcm4gYHNtcF9sb2FkX2FjcXVpcmUoKWAvYHNtcF9zdG9yZV9yZWxlYXNlKClgIGFjcm9zcyB2YXJpb3VzIHN1YnN5c3RlbXMgbGlrZSBBSU8sIGV4dDQsIGZpbGUgc3lzdGVtcywgYW5kIG5ldHdvcmtpbmcuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBtZW1vcnkgYmFycmllciBtb2Rlcm5pemF0aW9uIGVmZm9ydCwgd2hpY2ggaXMgZ29vZCBob3VzZWtlZXBpbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZXNlIGNoYW5nZXMgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHdheXMgZm9yIHRoZSBrZXJuZWwgdG8gcmVhZCB1bmluaXRpYWxpemVkIGRhdGEuIEhvd2V2ZXIsIGFmdGVyIGEgcXVpY2sgc2NhbiwgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRoYXQgYW55IG5ldyB2YXJpYWJsZXMgb3Igc3RydWN0dXJlcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4gRnVydGhlcm1vcmUsIHdlIGFyZW4mIzM5O3QgY2hhbmdpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocywgbm9yIGlzIGFueXRoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4KCkRpZ2dpbmcgaW4gYSBsaXR0bGUgZGVlcGVyLCB0aGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVwbGFjZW1lbnRzIG9mIG1lbW9yeSBiYXJyaWVycyB3aXRoIGFjcXVpcmUvcmVsZWFzZSBvcGVyYXRpb25zLiBUaGVzZSBvcGVyYXRpb25zIGluaGVyZW50bHkgcHJvdmlkZSBtZW1vcnkgb3JkZXJpbmcgZ3VhcmFudGVlcywganVzdCBsaWtlIHRoZSBvbGQgYmFycmllcnMgZGlkLCBzbyBjb25jZXB0dWFsbHksIHdlJiMzOTtyZSBtYWtpbmcgdGhlIGNvZGUgc2FmZXIgb3IgYXQgbGVhc3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuCgpJIGRpZCBhIGxpbmUtYnktbGluZSBpbnNwZWN0aW9uIG9mIGFsbCB0aGUgY2hhbmdlcywgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGVzIGdpdmVuLgoKSW4gdGhlIGNhc2Ugb2YgYGZzL2Fpby5jYCwgZm9yIGV4YW1wbGUsIHRoZSBjb252ZXJzaW9uIGlzIGEgc3RhbmRhcmQgYHNtcF93bWIoKWAgYW5kIGFzc2lnbm1lbnQgdG8gYSBgc21wX3N0b3JlX3JlbGVhc2UoKWAsIHdoaWNoIGlzIHBlcmZlY3RseSBmaW5lLiBgZnMvZXh0NC9leHQ0LmhgIGlzIGFub3RoZXIgZXhhbXBsZSBvZiBzdGFuZGFyZCBjb252ZXJzaW9uLiBgZnMvZmlsZS5jYCwgYGZzL3BpZGZzLmNgLCBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgLCBgbGliL3ZzcHJpbnRmLmNgLCBgbmV0LzgwMjFxL3ZsYW4uY2AsIGBuZXQvY2FuL2lzb3RwLmNgLCBgbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY2AsIGFuZCBgbmV0L3NjaGVkL2FjdF9nYWN0LmNgIGFsc28gc2hvdyBzdGFuZGFyZCBjb252ZXJzaW9ucy4gTm90aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgaGVyZS4gTm8gbmV3LCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdmlzaWJsZS4KCkVzc2VudGlhbGx5LCBhbGwgdGhlIGNoYW5nZXMgYXJlIGp1c3QgcmVwbGFjaW5nIG1lbW9yeSBiYXJyaWVycyB3aXRoIGFjcXVpcmUvcmVsZWFzZS4gVGhlIG9sZCBiYXJyaWVycyBlbnN1cmVkIHRoZSByZWFkcyBhbmQgd3JpdGVzIHdlcmUgb3JkZXJlZCBhcyBpbnRlbmRlZCBhbmQgdGhlIG5ldyBpbnN0cnVjdGlvbnMgZG8gdGhlIHNhbWUgdGhpbmcuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlZmFjdG9yaW5nLCBhbmQgaW50cm9kdWNlIG5vdGhpbmcgbmV3LCBhIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQuIElmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaXNzdWVzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB0aGV5JiMzOTtkIGJlIGNhdWdodCBieSBLQ1NBTiBvciBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBjb2RlIHJldmlldy4gVGhpcyBpc24mIzM5O3QgYSBLTVNBTiBpc3N1ZSwgc28gTmVlZHNLTVNBTiBpcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpcyBhIHJlZmFjdG9yaW5nIHRoYXQgcmVwbGFjZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYigpYCBhbmQgYHNtcF93bWIoKWApIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoYHNtcF9sb2FkX2FjcXVpcmUoKWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCkgYWNyb3NzIHZhcmlvdXMgc3Vic3lzdGVtcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBmaWVsZHMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM3LjY4MTE1MzI0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTM4MTUzMDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpcyBhIHJlZmFjdG9yaW5nIHRoYXQgcmVwbGFjZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYigpYCBhbmQgYHNtcF93bWIoKWApIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoYHNtcF9sb2FkX2FjcXVpcmUoKWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCkgYWNyb3NzIHZhcmlvdXMgc3Vic3lzdGVtcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBmaWVsZHMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG1lbW9yeSBiYXJyaWVycyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoZnMsIG5ldCwga2VybmVsLCBsaWIpIGJ5IHJlcGxhY2luZyBwbGFpbiByZWFkcy93cml0ZXMgYW5kIHNtcF9ybWIvd21iIHdpdGggYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcyAoc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBjb25jdXJyZW5jeSBzZW1hbnRpY3MsIGZpeGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW1wcm92aW5nIGNvcnJlY3RuZXNzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbG9naWMsIGluY2x1ZGluZyBleHQ0IHJlc2l6aW5nLCBBSU8gZXZlbnQgcmVhZGluZywgdXNlciBuYW1lc3BhY2UgSUQgbWFwcGluZywgQ0FOIElTT1RQIG1lc3NhZ2Ugc2VuZGluZywgYW5kIFNPX1JFVVNFUE9SVCBzb2NrZXQgc2VsZWN0aW9uLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM3LjY4MTE1ODQ5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzIxNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjgwODdkYTNlYTQ1OGFiYTBiNGUxZDEyNTI5ZDBiZDdiNDA1ZWM0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDozNjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXFxuaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDRcXG4tLS0gYS9mcy9haW8uY1xcbisrKyBiL2ZzL2Fpby5jXFxuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXFxuIFxcdC8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlXFxuIFxcdCAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluXFxuIFxcdCAqL1xcbi1cXHRzbXBfd21iKCk7XFx0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXFxuLVxcbi1cXHRjdHgtXFx1MDAzZXRhaWwgPSB0YWlsO1xcbitcXHRXUklURV9PTkNFKGN0eC1cXHUwMDNldGFpbCwgdGFpbCk7XFxuIFxcbiBcXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXFx1MDAzZXJpbmdfZm9saW9zWzBdKTtcXG4gXFx0aGVhZCA9IHJpbmctXFx1MDAzZWhlYWQ7XFxuLVxcdHJpbmctXFx1MDAzZXRhaWwgPSB0YWlsO1xcbitcXHQvKiBNYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnJpbmctXFx1MDAzZXRhaWwsIHRhaWwpO1xcbiBcXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1swXSk7XFxuIFxcbiBcXHRjdHgtXFx1MDAzZWNvbXBsZXRlZF9ldmVudHMrKztcXG5AQCAtMTI4OCwxMyArMTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXFxuIFxcdC8qIEFjY2VzcyB0byAtXFx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cXHUwMDNlcmluZ19sb2NrLiAqL1xcbiBcXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXFx1MDAzZXJpbmdfZm9saW9zWzBdKTtcXG4gXFx0aGVhZCA9IHJpbmctXFx1MDAzZWhlYWQ7XFxuLVxcdHRhaWwgPSByaW5nLVxcdTAwM2V0YWlsO1xcbi1cXG4gXFx0LypcXG4gXFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSd2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxcbiBcXHQgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuXFxuK1xcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS5cXG4gXFx0ICovXFxuLVxcdHNtcF9ybWIoKTtcXG4rXFx0dGFpbCA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnJpbmctXFx1MDAzZXRhaWwpO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcImgldSB0JXUgbSV1XFxcXG5cXFwiLCBoZWFkLCB0YWlsLCBjdHgtXFx1MDAzZW5yX2V2ZW50cyk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWVcXG4tICogdGhlIGxvY2tpbmcgcHJvdG9jb2wgZG9jdW1lbnRlZCBpbiB0aGUgY29tbWVudHMgb2YgZXh0NF9ncm91cF9hZGQoKVxcbi0gKiBpbiByZXNpemUuY1xcbisgKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHVzZXMgYWNxdWlyZSBzZW1hbnRpY3MuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRleHQ0X2dyb3VwX3RcXHRuZ3JvdXBzID0gRVhUNF9TQihzYiktXFx1MDAzZXNfZ3JvdXBzX2NvdW50O1xcbi1cXG4tXFx0c21wX3JtYigpO1xcbi1cXHRyZXR1cm4gbmdyb3VwcztcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cXG4rXFx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZmxleF9ncm91cChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmNcXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXFxuKysrIGIvZnMvZXh0NC9tYmFsbG9jLmNcXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxcbiBcXG4gXFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xcbiBcXHRpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy1cXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxcbi1cXHRcXHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cXHUwMDNlYWNfc2IpLVxcdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHM7XFxuLVxcbi1cXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXFxuLVxcdHNtcF9ybWIoKTtcXG4rXFx0XFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cXG4rXFx0XFx0bmdyb3VwcyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNkVYVDRfU0IoYWMtXFx1MDAzZWFjX3NiKS1cXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzKTtcXG4gXFxuIFxcdHJldHVybiBuZ3JvdXBzO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXFxuaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jXFxuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xcbkBAIC0xNDYyLDExICsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdCAqXFxuIFxcdCAqIFRoZSBwcmVjaXNlIHJ1bGVzIHdlIHVzZSBhcmU6XFxuIFxcdCAqXFxuLVxcdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXFxuLVxcdCAqICAgZGVwZW5kZW50IGRhdGEgYW5kIGJlZm9yZSBtb2RpZnlpbmcgdGhlIGdyb3VwcyBjb3VudFxcbitcXHQgKiAqIFdyaXRlcnMgbXVzdCB1c2UgYSByZWxlYXNlIHN0b3JlIHdoZW4gdXBkYXRpbmcgdGhlIGdyb3VwcyBjb3VudFxcbitcXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXFxuIFxcdCAqXFxuLVxcdCAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3Vwc1xcbi1cXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXFxuK1xcdCAqICogUmVhZGVycyBtdXN0IHVzZSBhbiBhY3F1aXJlIGxvYWQgd2hlbiByZWFkaW5nIHRoZSBncm91cHNcXG4rXFx0ICogICBjb3VudCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXFxuIFxcdCAqXFxuIFxcdCAqIE5CLiBUaGVzZSBydWxlcyBjYW4gYmUgcmVsYXhlZCB3aGVuIGNoZWNraW5nIHRoZSBncm91cCBjb3VudFxcbiBcXHQgKiB3aGlsZSBmcmVlaW5nIGRhdGEsIGFzIHdlIGNhbiBvbmx5IGFsbG9jYXRlIGZyb20gYSBibG9ja1xcbkBAIC0xNDc0LDEyICsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdCAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0XFxuIFxcdCAqIGFsbG9jYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRzbXBfd21iKCk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqL1xcbi1cXHRzYmktXFx1MDAzZXNfZ3JvdXBzX2NvdW50ICs9IGZsZXhfZ2QtXFx1MDAzZWNvdW50O1xcbi1cXHRzYmktXFx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyA9IG1pbihzYmktXFx1MDAzZXNfZ3JvdXBzX2NvdW50LFxcbi1cXHRcXHRcXHQoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpO1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCxcXG4rXFx0XFx0XFx0ICBzYmktXFx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cXHUwMDNlY291bnQpO1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZzYmktXFx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyxcXG4rXFx0XFx0XFx0ICBtaW4oc2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCxcXG4rXFx0XFx0XFx0ICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpc1xcbiBcXHQgKiBhY3RpdmUuICovXFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuY1xcbmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0XFxuLS0tIGEvZnMvZmlsZS5jXFxuKysrIGIvZnMvZmlsZS5jXFxuQEAgLTI3Myw4ICsyNzMsNiBAQCBzdGF0aWMgaW50IGV4cGFuZF9mZHRhYmxlKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy1cXHUwMDNlZmR0LCBuZXdfZmR0KTtcXG4gXFx0aWYgKGN1cl9mZHQgIT0gXFx1MDAyNmZpbGVzLVxcdTAwM2VmZHRhYilcXG4gXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmN1cl9mZHQtXFx1MDAzZXJjdSwgZnJlZV9mZHRhYmxlX3JjdSk7XFxuLVxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovXFxuLVxcdHNtcF93bWIoKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMxMyw3ICszMTEsOCBAQCBzdGF0aWMgaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHQvKiBBbGwgZ29vZCwgc28gd2UgdHJ5ICovXFxuIFxcdGZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xcbiBcXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XFxuLVxcdGZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcXG4rXFx0LyogY291cGxlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBmZF9pbnN0YWxsKCkgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcXG4gXFxuIFxcdHdha2VfdXBfYWxsKFxcdTAwMjZmaWxlcy1cXHUwMDNlcmVzaXplX3dhaXQpO1xcbiBcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTY4NSwxMyArNjg0LDEyIEBAIHZvaWQgZmRfaW5zdGFsbCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrX3NjaGVkKCk7XFxuLVxcdGlmICh1bmxpa2VseShmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzKSkge1xcbitcXHQvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqL1xcbitcXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2ZmlsZXMtXFx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9ja19zY2hlZCgpO1xcbiBcXHRcXHRmZF9pbnN0YWxsX3Nsb3dwYXRoKGZkLCBmaWxlKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcdGZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy1cXHUwMDNlZmR0KTtcXG4gXFx0VkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LVxcdTAwM2VmZFtmZF0pICE9IE5VTEwpO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoZmR0LVxcdTAwM2VmZFtmZF0sIGZpbGUpO1xcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xcbmluZGV4IGE2YTY0M2YxNWQwOGEuLjJjZDBmYWI3MzE4MGUgMTAwNjQ0XFxuLS0tIGEvZnMvcGlkZnMuY1xcbisrKyBiL2ZzL3BpZGZzLmNcXG5AQCAtMzkzLDggKzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXG4gXFx0YXR0ciA9IFJFQURfT05DRShwaWQtXFx1MDAzZWF0dHIpO1xcbiBcXHRpZiAobWFzayBcXHUwMDI2IFBJREZEX0lORk9fRVhJVCkge1xcbi1cXHRcXHRpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfRVhJVCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG4tXFx0XFx0XFx0c21wX3JtYigpO1xcbitcXHRcXHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbiBcXHRcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcXG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXFxuIFxcdFxcdFxcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cXHUwMDNlY2dyb3VwaWQ7XFxuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG1hc2sgXFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XFxuLVxcdFxcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG4tXFx0XFx0XFx0c21wX3JtYigpO1xcbitcXHRcXHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG4gXFx0XFx0XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XFxuIFxcdFxcdFxcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVxcdTAwM2Vjb3JlZHVtcF9tYXNrO1xcbiBcXHRcXHRcXHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVxcdTAwM2Vjb3JlZHVtcF9zaWduYWw7XFxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXFxuaW5kZXggMDVlNDQzMTczMDM4Ny4uNTg2MGRhZWE2ZDQwNSAxMDA2NDRcXG4tLS0gYS9mcy9zdXBlci5jXFxuKysrIGIvZnMvc3VwZXIuY1xcbkBAIC0yNjcsMTIgKzI2NywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4gXFx0ICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmdcXG4gXFx0ICogZmlsZXN5c3RlbSBtaWdodCBiZSBpbiBhIHN0YXRlIG9mIHBhcnRpYWwgY29uc3RydWN0aW9uIGFuZCBoZW5jZSBpdFxcbiBcXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xcbi1cXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzXFxuLVxcdCAqIG1hdGNoZWQgd2l0aCB0aGUgb25lIGluIG1vdW50X2ZzKCkgYXMgd2UgZG9uJ3QgaG9sZCBsb2NrcyBoZXJlLlxcbitcXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIGFjcXVpcmUgaXMgbWF0Y2hlZFxcbitcXHQgKiB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHN1cGVyX3dha2UoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIShzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0JPUk4pKVxcbitcXHRpZiAoIShzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzYi1cXHUwMDNlc19mbGFncykgXFx1MDAyNiBTQl9CT1JOKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdGlmIChzYi1cXHUwMDNlc19vcCBcXHUwMDI2XFx1MDAyNiBzYi1cXHUwMDNlc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuaW5kZXggMGJlZDQ2MmU5YjJhMi4uNTc2YjY2N2E4ODEzNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXFxuQEAgLTMxNyw5ICszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb1xcbiBcXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxuIHtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm1hcC1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuIFxcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xcbi1cXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVxcdTAwM2Vucl9leHRlbnRzO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAoZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiBcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcXG5AQCAtMzgzLDkgKzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50XFxuIFxcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcXG4ge1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXFxuK1xcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzKTtcXG4gXFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XFxuLVxcdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXFx1MDAzZW5yX2V4dGVudHM7XFxuLVxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdGlmIChleHRlbnRzIFxcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXFxuIFxcdFxcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcXG5AQCAtNjc2LDkgKzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcClcXG4ge1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXFxuK1xcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzKTtcXG4gXFx0bG9mZl90IHBvcyA9ICpwcG9zO1xcbi1cXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVxcdTAwM2Vucl9leHRlbnRzO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAocG9zIFxcdTAwM2U9IGV4dGVudHMpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0ICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0XFxuIFxcdCAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLlxcbiBcXHQgKlxcbi1cXHQgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZVxcbi1cXHQgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24ndCBoYXZlIGNyYXp5XFxuLVxcdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXFxuK1xcdCAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50XFxuK1xcdCAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50XFxuK1xcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcXG4rXFx0ICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZlxcbitcXHQgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuXFxuIFxcdCAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xcbiBcXG5AQCAtMTA5OCw4ICsxMTAwLDggQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRtYXAtXFx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XFxuIFxcdFxcdG1hcC1cXHUwMDNlcmV2ZXJzZSA9IG5ld19tYXAucmV2ZXJzZTtcXG4gXFx0fVxcbi1cXHRzbXBfd21iKCk7XFxuLVxcdG1hcC1cXHUwMDNlbnJfZXh0ZW50cyA9IG5ld19tYXAubnJfZXh0ZW50cztcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gbWFwX2lkX3JhbmdlX3t1cCxkb3dufSgpIGFuZCBtX3N0YXJ0KCkuICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZtYXAtXFx1MDAzZW5yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7XFxuIFxcbiBcXHQqcHBvcyA9IGNvdW50O1xcbiBcXHRyZXQgPSBjb3VudDtcXG5kaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuY1xcbmluZGV4IGUyODVlOGJjNDcxMmEuLmQ2ZjIzNWUxNDNiNzIgMTAwNjQ0XFxuLS0tIGEvbGliL3ZzcHJpbnRmLmNcXG4rKysgYi9saWIvdnNwcmludGYuY1xcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcXG4ge1xcbiBcXHRnZXRfcmFuZG9tX2J5dGVzKFxcdTAwMjZwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpO1xcbiBcXG4tXFx0LyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cXG4tXFx0c21wX3dtYigpO1xcbi1cXHRXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xcbiBcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIH1cXG4gXFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XFxuIFxcbi1cXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSkpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbi1cXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovXFxuLVxcdHNtcF9ybWIoKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4gXFx0aGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgXFx1MDAyNnB0cl9rZXkpO1xcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbmluZGV4IDJkMmVmYjg3Nzk3NWQuLmUzNGFkYTBjY2VhY2YgMTAwNjQ0XFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xcbisrKyBiL25ldC84MDIxcS92bGFuLmNcXG5AQCAtNzAsMTAgKzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIFxcdGlmIChhcnJheSA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbi1cXHQvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xcbi1cXHRzbXBfd21iKCk7XFxuLVxcbi1cXHR2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSA9IGFycmF5O1xcbitcXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXFxuaW5kZXggYzQxY2FhZjk0MDk1Zi4uNmRiNzE3MmJkYWFjYyAxMDA2NDRcXG4tLS0gYS9uZXQvODAyMXEvdmxhbi5oXFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxcbkBAIC01NiwxMSArNTYsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcXG4gXFxuLVxcdGFycmF5ID0gdmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4tXFx0XFx0XFx0XFx0ICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07XFxuLVxcbi1cXHQvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXFxuK1xcdGFycmF5ID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4rXFx0XFx0XFx0XFx0IFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pO1xcbiBcXG4gXFx0cmV0dXJuIGFycmF5ID8gYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dIDogTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcXG5pbmRleCAxNTU1MzBhZWRjZTJlLi4xMWI2NTNiYTdjMTA5IDEwMDY0NFxcbi0tLSBhL25ldC9jYW4vaXNvdHAuY1xcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xcbkBAIC0xMTU2LDggKzExNTYsOCBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0bXlfZ2VuID0gaXNvdHBfaW5jX3R4X2dlbihSRUFEX09OQ0Uoc28tXFx1MDAzZXR4X2dlbikpO1xcbiBcXHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovXFxuIFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcXG4tXFx0c21wX3dtYigpOyAvKiBzZWUgc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xcbi1cXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcXG4gXFx0V1JJVEVfT05DRShzby1cXHUwMDNlY2ZlY2hvLCAwKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXFxuaW5kZXggMjk5NDhjYjQ0YjdkMS4uNmQzYzUxMWQxZGVmOSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXFxuKysrIGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xcbkBAIC0xMjUsOSArMTI1LDggQEAgc3RhdGljIHZvaWQgX19yZXVzZXBvcnRfYWRkX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSlcXG4ge1xcbiBcXHRyZXVzZS1cXHUwMDNlc29ja3NbcmV1c2UtXFx1MDAzZW51bV9zb2Nrc10gPSBzaztcXG4tXFx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xcbi1cXHRzbXBfd21iKCk7XFxuLVxcdHJldXNlLVxcdTAwM2VudW1fc29ja3MrKztcXG4rXFx0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2cmV1c2UtXFx1MDAzZW51bV9zb2NrcywgcmV1c2UtXFx1MDAzZW51bV9zb2NrcyArIDEpO1xcbiBcXHRyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpO1xcbiB9XFxuIFxcbkBAIC0xNDAsNyArMTM5LDggQEAgc3RhdGljIGJvb2wgX19yZXVzZXBvcnRfZGV0YWNoX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRyZXVzZS1cXHUwMDNlc29ja3NbaV0gPSByZXVzZS1cXHUwMDNlc29ja3NbcmV1c2UtXFx1MDAzZW51bV9zb2NrcyAtIDFdO1xcbi1cXHRyZXVzZS1cXHUwMDNlbnVtX3NvY2tzLS07XFxuK1xcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnJldXNlLVxcdTAwM2VudW1fc29ja3MsIHJldXNlLVxcdTAwM2VudW1fc29ja3MgLSAxKTtcXG4gXFx0cmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01ODMsMTEgKzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXFx1MDAzZXByb2cpO1xcbi1cXHRzb2NrcyA9IFJFQURfT05DRShyZXVzZS1cXHUwMDNlbnVtX3NvY2tzKTtcXG4rXFx0LyogcGFpcmVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXFxuK1xcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2cmV1c2UtXFx1MDAzZW51bV9zb2Nrcyk7XFxuIFxcdGlmIChsaWtlbHkoc29ja3MpKSB7XFxuLVxcdFxcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXFxuLVxcdFxcdHNtcF9ybWIoKTtcXG4tXFxuIFxcdFxcdGlmICghcHJvZyB8fCAhc2tiKVxcbiBcXHRcXHRcXHRnb3RvIHNlbGVjdF9ieV9oYXNoO1xcbiBcXG5AQCAtNjM0LDEzICs2MzIsMTEgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9taWdyYXRlX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpZiAoIXJldXNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVxcdTAwM2VudW1fc29ja3MpO1xcbitcXHQvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cXG4rXFx0c29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZyZXVzZS1cXHUwMDNlbnVtX3NvY2tzKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFzb2NrcykpXFxuIFxcdFxcdGdvdG8gZmFpbHVyZTtcXG4gXFxuLVxcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXFxuLVxcdHNtcF9ybWIoKTtcXG4tXFxuIFxcdGhhc2ggPSBtaWdyYXRpbmdfc2stXFx1MDAzZXNrX2hhc2g7XFxuIFxcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXFx1MDAzZXByb2cpO1xcbiBcXHRpZiAoIXByb2cgfHwgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1NLX1JFVVNFUE9SVF9TRUxFQ1RfT1JfTUlHUkFURSkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhY3QuYyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jXFxuaW5kZXggNTY1ODYwY2NjYmE2ZC4uZDRmMzlmOThlMmNmMCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jXFxuQEAgLTI1LDcgKzI1LDYgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcztcXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcXG4gc3RhdGljIGludCBnYWN0X25ldF9yYW5kKHN0cnVjdCB0Y2ZfZ2FjdCAqZ2FjdClcXG4ge1xcbi1cXHRzbXBfcm1iKCk7IC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGNmX2dhY3RfaW5pdCgpICovXFxuIFxcdGlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LVxcdTAwM2V0Y2ZnX3B2YWwpKVxcbiBcXHRcXHRyZXR1cm4gZ2FjdC1cXHUwMDNldGNmX2FjdGlvbjtcXG4gXFx0cmV0dXJuIGdhY3QtXFx1MDAzZXRjZmdfcGFjdGlvbjtcXG5AQCAtMzUsNyArMzQsNiBAQCBzdGF0aWMgaW50IGdhY3RfZGV0ZXJtKHN0cnVjdCB0Y2ZfZ2FjdCAqZ2FjdClcXG4ge1xcbiBcXHR1MzIgcGFjayA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZnYWN0LVxcdTAwM2VwYWNrZXRzKTtcXG4gXFxuLVxcdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cXG4gXFx0aWYgKHBhY2sgJSBnYWN0LVxcdTAwM2V0Y2ZnX3B2YWwpXFxuIFxcdFxcdHJldHVybiBnYWN0LVxcdTAwM2V0Y2ZfYWN0aW9uO1xcbiBcXHRyZXR1cm4gZ2FjdC1cXHUwMDNldGNmZ19wYWN0aW9uO1xcbkBAIC0xMzMsMTEgKzEzMSw4IEBAIHN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4gXFx0aWYgKHBfcGFybSkge1xcbiBcXHRcXHRnYWN0LVxcdTAwM2V0Y2ZnX3BhY3Rpb24gPSBwX3Bhcm0tXFx1MDAzZXBhY3Rpb247XFxuIFxcdFxcdGdhY3QtXFx1MDAzZXRjZmdfcHZhbCAgICA9IG1heF90KHUxNiwgMSwgcF9wYXJtLVxcdTAwM2VwdmFsKTtcXG4tXFx0XFx0LyogTWFrZSBzdXJlIHRjZmdfcHZhbCBpcyB3cml0dGVuIGJlZm9yZSB0Y2ZnX3B0eXBlXFxuLVxcdFxcdCAqIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZ2FjdF9uZXRfcmFuZCgpIFxcdTAwMjYgZ2FjdF9kZXRlcm0oKVxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c21wX3dtYigpO1xcbi1cXHRcXHRnYWN0LVxcdTAwM2V0Y2ZnX3B0eXBlICAgPSBwX3Bhcm0tXFx1MDAzZXB0eXBlO1xcbitcXHRcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZmdfcHR5cGUsIHBfcGFybS1cXHUwMDNlcHR5cGUpO1xcbiBcXHR9XFxuICNlbmRpZlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbkBAIC0xNjAsNyArMTU1LDggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYWN0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcXG4gXFx0e1xcbi1cXHR1MzIgcHR5cGUgPSBSRUFEX09OQ0UoZ2FjdC1cXHUwMDNldGNmZ19wdHlwZSk7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cXG4rXFx0dTMyIHB0eXBlID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Z2FjdC1cXHUwMDNldGNmZ19wdHlwZSk7XFxuIFxcbiBcXHRpZiAocHR5cGUpXFxuIFxcdFxcdGFjdGlvbiA9IGdhY3RfcmFuZFtwdHlwZV0oZ2FjdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM4LjE2OTE0NTc3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3MjM0NDg1MjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIGFjcm9zcyBtdWx0aXBsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIChmcywgbmV0LCBrZXJuZWwsIGxpYikgYnkgcmVwbGFjaW5nIHBsYWluIHJlYWRzL3dyaXRlcyBhbmQgc21wX3JtYi93bWIgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIGNvbmN1cnJlbmN5IHNlbWFudGljcywgZml4aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbXByb3ZpbmcgY29ycmVjdG5lc3MuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBsb2dpYywgaW5jbHVkaW5nIGV4dDQgcmVzaXppbmcsIEFJTyBldmVudCByZWFkaW5nLCB1c2VyIG5hbWVzcGFjZSBJRCBtYXBwaW5nLCBDQU4gSVNPVFAgbWVzc2FnZSBzZW5kaW5nLCBhbmQgU09fUkVVU0VQT1JUIHNvY2tldCBzZWxlY3Rpb24uIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjgwODdkYTNlYTQ1OGFiYTBiNGUxZDEyNTI5ZDBiZDdiNDA1ZWM0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjM2OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uNDQxM2M4MjY4OGNjOCAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4tXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4rXHRXUklURV9PTkNFKGN0eC1cdTAwM2V0YWlsLCB0YWlsKTtcbiBcbiBcdHJpbmcgPSBmb2xpb19hZGRyZXNzKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXHRoZWFkID0gcmluZy1cdTAwM2VoZWFkO1xuLVx0cmluZy1cdTAwM2V0YWlsID0gdGFpbDtcbitcdC8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmluZy1cdTAwM2V0YWlsLCB0YWlsKTtcbiBcdGZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFxuIFx0Y3R4LVx1MDAzZWNvbXBsZXRlZF9ldmVudHMrKztcbkBAIC0xMjg4LDEzICsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCxcbiBcdC8qIEFjY2VzcyB0byAtXHUwMDNlcmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LVx1MDAzZXJpbmdfbG9jay4gKi9cbiBcdHJpbmcgPSBmb2xpb19hZGRyZXNzKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXHRoZWFkID0gcmluZy1cdTAwM2VoZWFkO1xuLVx0dGFpbCA9IHJpbmctXHUwMDNldGFpbDtcbi1cbiBcdC8qXG4gXHQgKiBFbnN1cmUgdGhhdCBvbmNlIHdlJ3ZlIHJlYWQgdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyLCB0aGF0XG4gXHQgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuXG4rXHQgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuXG4gXHQgKi9cbi1cdHNtcF9ybWIoKTtcbitcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJpbmctXHUwMDNldGFpbCk7XG4gXG4gXHRwcl9kZWJ1ZyhcImgldSB0JXUgbSV1XFxuXCIsIGhlYWQsIHRhaWwsIGN0eC1cdTAwM2Vucl9ldmVudHMpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0zNTQyLDE2ICszNTQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lzaXplX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBsb2ZmX3QgaV9zaXplKVxuIH1cbiBcbiAvKlxuLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWVcbi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpXG4tICogaW4gcmVzaXplLmNcbisgKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHVzZXMgYWNxdWlyZSBzZW1hbnRpY3MuXG4gICovXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0ZXh0NF9ncm91cF90XHRuZ3JvdXBzID0gRVhUNF9TQihzYiktXHUwMDNlc19ncm91cHNfY291bnQ7XG4tXG4tXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4gbmdyb3VwcztcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXG4rXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZmxleF9ncm91cChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4rKysgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTg5OSwxMCArODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudChcbiBcbiBcdC8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi9cbiBcdGlmICghKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGFjLVx1MDAzZWFjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSlcbi1cdFx0bmdyb3VwcyA9IEVYVDRfU0IoYWMtXHUwMDNlYWNfc2IpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3Vwcztcbi1cbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbi1cdHNtcF9ybWIoKTtcbitcdFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdFx0bmdyb3VwcyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2RVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzKTtcbiBcbiBcdHJldHVybiBuZ3JvdXBzO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuY1xuaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvcmVzaXplLmNcbisrKyBiL2ZzL2V4dDQvcmVzaXplLmNcbkBAIC0xNDYyLDExICsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKlxuIFx0ICogVGhlIHByZWNpc2UgcnVsZXMgd2UgdXNlIGFyZTpcbiBcdCAqXG4tXHQgKiAqIFdyaXRlcnMgbXVzdCBwZXJmb3JtIGEgc21wX3dtYigpIGFmdGVyIHVwZGF0aW5nIGFsbFxuLVx0ICogICBkZXBlbmRlbnQgZGF0YSBhbmQgYmVmb3JlIG1vZGlmeWluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAqIFdyaXRlcnMgbXVzdCB1c2UgYSByZWxlYXNlIHN0b3JlIHdoZW4gdXBkYXRpbmcgdGhlIGdyb3VwcyBjb3VudFxuK1x0ICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZFxuIFx0ICpcbi1cdCAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3Vwc1xuLVx0ICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxuK1x0ICogKiBSZWFkZXJzIG11c3QgdXNlIGFuIGFjcXVpcmUgbG9hZCB3aGVuIHJlYWRpbmcgdGhlIGdyb3Vwc1xuK1x0ICogICBjb3VudCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4gXHQgKlxuIFx0ICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50XG4gXHQgKiB3aGlsZSBmcmVlaW5nIGRhdGEsIGFzIHdlIGNhbiBvbmx5IGFsbG9jYXRlIGZyb20gYSBibG9ja1xuQEAgLTE0NzQsMTIgKzE0NzQsMTUgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0XG4gXHQgKiBhbGxvY2F0aW9uLlxuIFx0ICovXG4tXHRzbXBfd21iKCk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqL1xuLVx0c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICs9IGZsZXhfZ2QtXHUwMDNlY291bnQ7XG4tXHRzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzID0gbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbi1cdFx0XHQoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KCkgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgIHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCArIGZsZXhfZ2QtXHUwMDNlY291bnQpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyxcbitcdFx0XHQgIG1pbihzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4rXHRcdFx0ICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpc1xuIFx0ICogYWN0aXZlLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuY1xuaW5kZXggNjI4Y2EwN2RjNGIxNy4uODZjMDM1ZDQ1OWYyYSAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGUuY1xuKysrIGIvZnMvZmlsZS5jXG5AQCAtMjczLDggKzI3Myw2IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZkdGFibGUoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy1cdTAwM2VmZHQsIG5ld19mZHQpO1xuIFx0aWYgKGN1cl9mZHQgIT0gXHUwMDI2ZmlsZXMtXHUwMDNlZmR0YWIpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNmN1cl9mZHQtXHUwMDNlcmN1LCBmcmVlX2ZkdGFibGVfcmN1KTtcbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovXG4tXHRzbXBfd21iKCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzEzLDcgKzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXG4gXHQvKiBBbGwgZ29vZCwgc28gd2UgdHJ5ICovXG4gXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xuIFx0ZXJyb3IgPSBleHBhbmRfZmR0YWJsZShmaWxlcywgbnIpO1xuLVx0ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7XG4rXHQvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzLCBmYWxzZSk7XG4gXG4gXHR3YWtlX3VwX2FsbChcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfd2FpdCk7XG4gXHRyZXR1cm4gZXJyb3I7XG5AQCAtNjg1LDEzICs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJjdV9yZWFkX2xvY2tfc2NoZWQoKTtcbi1cdGlmICh1bmxpa2VseShmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSB7XG4rXHQvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqL1xuK1x0aWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2ZmlsZXMtXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzKSkpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7XG4gXHRcdGZkX2luc3RhbGxfc2xvd3BhdGgoZmQsIGZpbGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIGV4cGFuZF9mZHRhYmxlKCkgKi9cbi1cdHNtcF9ybWIoKTtcbiBcdGZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy1cdTAwM2VmZHQpO1xuIFx0VkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LVx1MDAzZWZkW2ZkXSkgIT0gTlVMTCk7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZmR0LVx1MDAzZWZkW2ZkXSwgZmlsZSk7XG5kaWZmIC0tZ2l0IGEvZnMvcGlkZnMuYyBiL2ZzL3BpZGZzLmNcbmluZGV4IGE2YTY0M2YxNWQwOGEuLjJjZDBmYWI3MzE4MGUgMTAwNjQ0XG4tLS0gYS9mcy9waWRmcy5jXG4rKysgYi9mcy9waWRmcy5jXG5AQCAtMzkzLDggKzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFxuIFx0YXR0ciA9IFJFQURfT05DRShwaWQtXHUwMDNlYXR0cik7XG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbi1cdFx0XHRzbXBfcm1iKCk7XG4rXHRcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xuICNpZmRlZiBDT05GSUdfQ0dST1VQU1xuIFx0XHRcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cdTAwM2VjZ3JvdXBpZDtcbkBAIC00MDUsOCArNDA0LDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHR9XG4gXG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19DT1JFRFVNUCkge1xuLVx0XHRpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFO1xuIFx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cdTAwM2Vjb3JlZHVtcF9zaWduYWw7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjU4NjBkYWVhNmQ0MDUgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMjY3LDEyICsyNjcsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHQgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZ1xuIFx0ICogZmlsZXN5c3RlbSBtaWdodCBiZSBpbiBhIHN0YXRlIG9mIHBhcnRpYWwgY29uc3RydWN0aW9uIGFuZCBoZW5jZSBpdFxuIFx0ICogaXMgZGFuZ2Vyb3VzIHRvIGFjY2VzcyBpdC4gIHN1cGVyX3RyeWxvY2tfc2hhcmVkKCkgdXNlcyBhIFNCX0JPUk4gY2hlY2tcbi1cdCAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXNcbi1cdCAqIG1hdGNoZWQgd2l0aCB0aGUgb25lIGluIG1vdW50X2ZzKCkgYXMgd2UgZG9uJ3QgaG9sZCBsb2NrcyBoZXJlLlxuK1x0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBhY3F1aXJlIGlzIG1hdGNoZWRcbitcdCAqIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gc3VwZXJfd2FrZSgpIGFzIHdlIGRvbid0IGhvbGQgbG9ja3MgaGVyZS5cbiBcdCAqL1xuLVx0aWYgKCEoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQk9STikpXG4rXHRpZiAoIShzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpIFx1MDAyNiBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgKzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSArMzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbid0IGhhdmUgY3Jhenlcbi1cdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXG4rXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuK1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbitcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcbitcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbitcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0bWFwLVx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XG4gXHRcdG1hcC1cdTAwM2VyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlO1xuIFx0fVxuLVx0c21wX3dtYigpO1xuLVx0bWFwLVx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IGUyODVlOGJjNDcxMmEuLmQ2ZjIzNWUxNDNiNzIgMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuKysrIGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcbiB7XG4gXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnB0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3dtYigpO1xuLVx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XG4gXG4tXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xuaW5kZXggMmQyZWZiODc3OTc1ZC4uZTM0YWRhMGNjZWFjZiAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmNcbisrKyBiL25ldC84MDIxcS92bGFuLmNcbkBAIC03MCwxMCArNzAsOCBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiBcdGlmIChhcnJheSA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4tXHQvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuLVx0c21wX3dtYigpO1xuLVxuLVx0dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSA9IGFycmF5O1xuK1x0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzQxY2FhZjk0MDk1Zi4uNmRiNzE3MmJkYWFjYyAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmhcbisrKyBiL25ldC84MDIxcS92bGFuLmhcbkBAIC01NiwxMSArNTYsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcbiBcbi1cdGFycmF5ID0gdmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxuLVx0XHRcdFx0ICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07XG4tXG4tXHQvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cbitcdGFycmF5ID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4rXHRcdFx0XHQgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSk7XG4gXG4gXHRyZXR1cm4gYXJyYXkgPyBhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0gOiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjExYjY1M2JhN2MxMDkgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTExNTYsOCArMTE1Niw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0bXlfZ2VuID0gaXNvdHBfaW5jX3R4X2dlbihSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSk7XG4gXHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4sIEVDT01NKTsgLyogcHJldmVudCBzdGFsZSBzbG90IG1hdGNoaW5nICovXG4gXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcbi1cdHNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi9cbi1cdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1NFTkRJTkcpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4gXHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jIGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuaW5kZXggMjk5NDhjYjQ0YjdkMS4uNmQzYzUxMWQxZGVmOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNcbisrKyBiL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNcbkBAIC0xMjUsOSArMTI1LDggQEAgc3RhdGljIHZvaWQgX19yZXVzZXBvcnRfYWRkX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXG4ge1xuIFx0cmV1c2UtXHUwMDNlc29ja3NbcmV1c2UtXHUwMDNlbnVtX3NvY2tzXSA9IHNrO1xuLVx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xuLVx0c21wX3dtYigpO1xuLVx0cmV1c2UtXHUwMDNlbnVtX3NvY2tzKys7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MsIHJldXNlLVx1MDAzZW51bV9zb2NrcyArIDEpO1xuIFx0cmV1c2Vwb3J0X2dldF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcbiB9XG4gXG5AQCAtMTQwLDcgKzEzOSw4IEBAIHN0YXRpYyBib29sIF9fcmV1c2Vwb3J0X2RldGFjaF9zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cmV1c2UtXHUwMDNlc29ja3NbaV0gPSByZXVzZS1cdTAwM2Vzb2Nrc1tyZXVzZS1cdTAwM2VudW1fc29ja3MgLSAxXTtcbi1cdHJldXNlLVx1MDAzZW51bV9zb2Nrcy0tO1xuK1x0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHJldXNlcG9ydF8oc2VsZWN0fG1pZ3JhdGUpX3NvY2soKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmV1c2UtXHUwMDNlbnVtX3NvY2tzLCByZXVzZS1cdTAwM2VudW1fc29ja3MgLSAxKTtcbiBcdHJldXNlcG9ydF9wdXRfaW5jb21pbmdfY3B1KHNrLCByZXVzZSk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01ODMsMTEgKzU4Myw5IEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfc2VsZWN0X3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4tXHRzb2NrcyA9IFJFQURfT05DRShyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuK1x0LyogcGFpcmVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4rXHRzb2NrcyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2cmV1c2UtXHUwMDNlbnVtX3NvY2tzKTtcbiBcdGlmIChsaWtlbHkoc29ja3MpKSB7XG4tXHRcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4tXHRcdHNtcF9ybWIoKTtcbi1cbiBcdFx0aWYgKCFwcm9nIHx8ICFza2IpXG4gXHRcdFx0Z290byBzZWxlY3RfYnlfaGFzaDtcbiBcbkBAIC02MzQsMTMgKzYzMiwxMSBAQCBzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X21pZ3JhdGVfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAoIXJldXNlKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbitcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuIFx0aWYgKHVubGlrZWx5KCFzb2NrcykpXG4gXHRcdGdvdG8gZmFpbHVyZTtcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiBfX3JldXNlcG9ydF9hZGRfc29jaygpICovXG4tXHRzbXBfcm1iKCk7XG4tXG4gXHRoYXNoID0gbWlncmF0aW5nX3NrLVx1MDAzZXNrX2hhc2g7XG4gXHRwcm9nID0gcmN1X2RlcmVmZXJlbmNlKHJldXNlLVx1MDAzZXByb2cpO1xuIFx0aWYgKCFwcm9nIHx8IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1NLX1JFVVNFUE9SVF9TRUxFQ1RfT1JfTUlHUkFURSkge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmNcbmluZGV4IDU2NTg2MGNjY2JhNmQuLmQ0ZjM5Zjk4ZTJjZjAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmNcbkBAIC0yNSw3ICsyNSw2IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2FjdF9vcHM7XG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBzdGF0aWMgaW50IGdhY3RfbmV0X3JhbmQoc3RydWN0IHRjZl9nYWN0ICpnYWN0KVxuIHtcbi1cdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiBcdGlmIChnZXRfcmFuZG9tX3UzMl9iZWxvdyhnYWN0LVx1MDAzZXRjZmdfcHZhbCkpXG4gXHRcdHJldHVybiBnYWN0LVx1MDAzZXRjZl9hY3Rpb247XG4gXHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZnX3BhY3Rpb247XG5AQCAtMzUsNyArMzQsNiBAQCBzdGF0aWMgaW50IGdhY3RfZGV0ZXJtKHN0cnVjdCB0Y2ZfZ2FjdCAqZ2FjdClcbiB7XG4gXHR1MzIgcGFjayA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmdhY3QtXHUwMDNlcGFja2V0cyk7XG4gXG4tXHRzbXBfcm1iKCk7IC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGNmX2dhY3RfaW5pdCgpICovXG4gXHRpZiAocGFjayAlIGdhY3QtXHUwMDNldGNmZ19wdmFsKVxuIFx0XHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZfYWN0aW9uO1xuIFx0cmV0dXJuIGdhY3QtXHUwMDNldGNmZ19wYWN0aW9uO1xuQEAgLTEzMywxMSArMTMxLDggQEAgc3RhdGljIGludCB0Y2ZfZ2FjdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIFx0aWYgKHBfcGFybSkge1xuIFx0XHRnYWN0LVx1MDAzZXRjZmdfcGFjdGlvbiA9IHBfcGFybS1cdTAwM2VwYWN0aW9uO1xuIFx0XHRnYWN0LVx1MDAzZXRjZmdfcHZhbCAgICA9IG1heF90KHUxNiwgMSwgcF9wYXJtLVx1MDAzZXB2YWwpO1xuLVx0XHQvKiBNYWtlIHN1cmUgdGNmZ19wdmFsIGlzIHdyaXR0ZW4gYmVmb3JlIHRjZmdfcHR5cGVcbi1cdFx0ICogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBnYWN0X25ldF9yYW5kKCkgXHUwMDI2IGdhY3RfZGV0ZXJtKClcbi1cdFx0ICovXG4tXHRcdHNtcF93bWIoKTtcbi1cdFx0Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlICAgPSBwX3Bhcm0tXHUwMDNlcHR5cGU7XG4rXHRcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHRjZl9nYWN0X2FjdCgpLiAqL1xuK1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZnYWN0LVx1MDAzZXRjZmdfcHR5cGUsIHBfcGFybS1cdTAwM2VwdHlwZSk7XG4gXHR9XG4gI2VuZGlmXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbkBAIC0xNjAsNyArMTU1LDggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYWN0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuICNpZmRlZiBDT05GSUdfR0FDVF9QUk9CXG4gXHR7XG4tXHR1MzIgcHR5cGUgPSBSRUFEX09OQ0UoZ2FjdC1cdTAwM2V0Y2ZnX3B0eXBlKTtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbitcdHUzMiBwdHlwZSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZnX3B0eXBlKTtcbiBcbiBcdGlmIChwdHlwZSlcbiBcdFx0YWN0aW9uID0gZ2FjdF9yYW5kW3B0eXBlXShnYWN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM2OjM4LjE2OTE1NTg4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNTk4MjU2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBCYXJyaWVyIFJlZmFjdG9yaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBzd2FwcGluZyBvdXQgaW5zdGFuY2VzIG9mIGBzbXBfd21iKClgICsgYFdSSVRFX09OQ0UoKWAgYW5kIGBSRUFEX09OQ0UoKWAgKyBgc21wX3JtYigpYCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmUoKWAgYWNyb3NzIGEgYnVuY2ggb2Yga2VybmVsIHN1YnN5c3RlbXMuIEZpcnN0IHRob3VnaHQ6IHRoaXMgbG9va3MgbGlrZSBhIG1lbW9yeSBiYXJyaWVyIHJlZmFjdG9yaW5nLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCBmdW5jdGlvbmFsbHksIGRvZXMgdGhpcyBhY3R1YWxseSAqY2hhbmdlKiBhbnl0aGluZz8gTWVtb3J5IG9yZGVyaW5nIHNlbWFudGljcyBhcmUgZXNzZW50aWFsbHkgcHJlc2VydmVkLCBidXQgYWNxdWlyZS9yZWxlYXNlIGlzIGNsZWFuZXIgYW5kIGNhbiBiZSBtb3JlIGVmZmljaWVudCBvciBjb3JyZWN0IG9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgYW5kIGl0IGFwcGVhcnMgdGhlcmUncyBhbiBhY3R1YWwgYnVnZml4IGluIHRoZXJlLiBUaGlzIGlzbid0IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmN1cnJlbmN5IGZpeCB0aGF0IGFkZHJlc3NlcyBwb3RlbnRpYWwgZGF0YSByYWNlcy5cblxuTm93LCBkb2VzIHRoaXMgbWVyaXQgZnV6emluZz8gSXQgZGVmaW5pdGVseSBjaGFuZ2VzIHNvbWUgY29yZSBrZXJuZWwgbG9naWMg4oCTIGBmcy9haW9gLCBgZXh0NGAsIGBmaWxlYCwgYHBpZGZzYCwgYHN1cGVyYCwgYHVzZXJfbmFtZXNwYWNlYCwgYHZzcHJpbnRmYCwgYHZsYW5gLCBgY2FuYCwgYHNvY2tfcmV1c2Vwb3J0YCwgYW5kIGBhY3RfZ2FjdGAuIEFuZCBpdCdzIGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWNjZXNzZWQ7IGNoYW5naW5nIHBsYWluIHJlYWRzL3dyaXRlcyB0byBhY3F1aXJlL3JlbGVhc2Ugd2hpY2ggY2hhbmdlcyB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGFuZCBtZW1vcnkgb3JkZXJpbmcgc2VtYW50aWNzLiBUaGUgcGF0Y2ggaXMsIGluIGVmZmVjdCwgYSBmdW5jdGlvbmFsIGNoYW5nZS4gR2l2ZW4gdGhlIHByb21wdCBjcml0ZXJpYSwgaXQncyBub3QgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBhIGNvbnN0YW50IGNoYW5nZSwgdW5yZWFjaGFibGUgY29kZSwgb3IgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLlxuXG5TbywgeWVzLCBpdOKAmXMgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSB0b3VjaGVkIGFuZCBjb3VsZCBiZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYGFpb19jb21wbGV0ZWAsIGBhaW9fcmVhZF9ldmVudHNfcmluZ2AsIGBleHQ0X2dldF9ncm91cHNfY291bnRgLCBgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnRgLCBgZXh0NF91cGRhdGVfc3VwZXJgLCBgZXhwYW5kX2ZkdGFibGVgLCBgZXhwYW5kX2ZpbGVzYCwgYGZkX2luc3RhbGxgLCBgcGlkZmRfaW5mb2AsIGBzdXBlcl9jYWNoZV9jb3VudGAsIGBtYXBfaWRfcmFuZ2VfZG93bmAsIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbV9zdGFydGAsIGBtYXBfd3JpdGVgLCBgZmlsbF9wdHJfa2V5YCwgYF9fcHRyX3RvX2hhc2h2YWxgLCBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBgX192bGFuX2dyb3VwX2dldF9kZXZpY2VgLCBgaXNvdHBfc2VuZG1zZ2AsIGBfX3JldXNlcG9ydF9hZGRfc29ja2AsIGBfX3JldXNlcG9ydF9kZXRhY2hfc29ja2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBgcmV1c2Vwb3J0X21pZ3JhdGVfc29ja2AsIGBnYWN0X25ldF9yYW5kYCwgYGdhY3RfZGV0ZXJtYCwgYHRjZl9nYWN0X2luaXRgLCBhbmQgYHRjZl9nYWN0X2FjdGAuXG5cbkkgd2FudCB0byBwaWNrIHNvbWUgcmVhc29uYWJseSBub24taG90LXBhdGggQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzLiBgYWlvX2NvbXBsZXRlYCBhbmQgYGFpb19yZWFkX2V2ZW50c19yaW5nYCBhcmUgcHJldHR5IGhvdC1wYXRoLCBzbyB0aGF0J3Mgb3V0LiAgYGV4dDRfdXBkYXRlX3N1cGVyYCBnZXRzIGNhbGxlZCBkdXJpbmcgcmVzaXplLCB0aGF0J3Mgbm90IHRvbyBiYWQuIGBleHBhbmRfZmlsZXNgIHdoZW4gb3BlbmluZyBmaWxlcywgZGVjZW50LiAgYHBpZGZkX2luZm9gIGZvciBQSURGRCBpb2N0bHMsIHRoYXQgc291bmRzIGdvb2QuICBgbWFwX3dyaXRlYCBmb3IgYC9wcm9jL3NlbGYvdWlkX21hcGAgd3JpdGVzLCB0aGF0J3MgYSBnb29kIGNhbmRpZGF0ZS4gYGlzb3RwX3NlbmRtc2dgIGZvciBzZW5kaW5nIENBTiBJU09UUCBtZXNzYWdlcywgYWxzbyBsb29rcyBnb29kLiBBbmQsIGB0Y2ZfZ2FjdF9pbml0YCB3aGVuIGNvbmZpZ3VyaW5nIHRjIGdhY3QsIHRoYXQncyBub3QgYmFkLlxuXG5TbyBJJ3ZlIHBpY2tlZCBhIGZldyBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBmdXp6ZWQ6XG4tIGBleHQ0X3VwZGF0ZV9zdXBlcmBcbi0gYHBpZGZkX2luZm9gXG4tIGBtYXBfd3JpdGVgXG4tIGBpc290cF9zZW5kbXNnYFxuLSBgdGNmX2dhY3RfaW5pdGBcblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjAwLjc2NzQxNTc4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMxODk2MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSpleHQ0X3VwZGF0ZV9zdXBlclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvcmVzaXplLmM9MTQwMD1zdGF0aWMgdm9pZCBleHQ0X2FkZF9vdmVyaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xNDE3LSAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MTQxODpzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvcmVzaXplLmMtMTQxOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEgKmZsZXhfZ2QpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NzA9c3RhdGljIGludCBleHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7XFxuZnMvZXh0NC9zdXBlci5jOjcxOnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy03Mi1zdGF0aWMgaW50IGV4dDRfY29tbWl0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTYxMTY9c3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTYyNDktLyogQ29weSBzdGF0ZSBvZiBFWFQ0X1NCKHNiKSBpbnRvIGJ1ZmZlciBmb3Igb24tZGlzayBzdXBlcmJsb2NrICovXFxuZnMvZXh0NC9zdXBlci5jOjYyNTA6c3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNjI1MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjA5LjQ5OTMxNzE3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDcxNDkxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIEV4dDQgU3VwZXJibG9jayBVcGRhdGVzIGluIFJlc2l6ZSBPcGVyYXRpb25zKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gbm90aW5nIHRoYXQgdGhlIGBleHQ0X3VwZGF0ZV9zdXBlcmAgZnVuY3Rpb24gd2l0aGluIGBmcy9leHQ0L3Jlc2l6ZS5jYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCdzIGludGVybmFsIHRvIHRoYXQgY29tcGlsYXRpb24gdW5pdCwgbWFraW5nIGl0IHVubGlrZWx5IHRvIGJlIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmLlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0ICphcmUqIGxpa2VseSBlbnRyeSBwb2ludHMgaW50byB0aGUgcmVzaXplIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayB1cGRhdGUgaXMgYmVpbmcgdHJpZ2dlcmVkIGFuZCB3aGF0IGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIHJlc2l6ZSBwcm9jZXNzIGl0J3MgaW52b2x2ZWQgaW4uIEnigJlsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYW5kbGUgdXNlciByZXF1ZXN0cywgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgb3IgdGhvc2UgdGhhdCBtaWdodCBiZSBleHBvc2VkIHZpYSBWRlMgY2FsbHMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHJlc2l6aW5nIG9wZXJhdGlvbiBwcm9iYWJseSBsaWVzLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgYGV4dDRfdXBkYXRlX3N1cGVyYCBmaXRzIGludG8gdGhhdCBvdmVyYWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzc6MTMuOTQ2NDY4MzgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDY3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfdXBkYXRlX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvcmVzaXplLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9yZXNpemUuYz0xNDAwPXN0YXRpYyB2b2lkIGV4dDRfYWRkX292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTEtLypcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE0MTI6ICogZXh0NF91cGRhdGVfc3VwZXIoKSB1cGRhdGVzIHRoZSBzdXBlciBibG9jayBzbyB0aGF0IHRoZSBuZXdseSBhZGRlZFxcbmZzL2V4dDQvcmVzaXplLmMtMTQxMy0gKiBncm91cHMgY2FuIGJlIHNlZW4gYnkgdGhlIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE0MTctICovXFxuZnMvZXh0NC9yZXNpemUuYzoxNDE4OnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9yZXNpemUuYy0xNDE5LVxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfbmV3X2ZsZXhfZ3JvdXBfZGF0YSAqZmxleF9nZClcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTUzOD1zdGF0aWMgaW50IGV4dDRfZmxleF9ncm91cF9hZGQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtMTU5NC1cXG5mcy9leHQ0L3Jlc2l6ZS5jOjE1OTU6XFx0ZXh0NF91cGRhdGVfc3VwZXIoc2IsIGZsZXhfZ2QpO1xcbmZzL2V4dDQvcmVzaXplLmMtMTU5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzc6MTMuOTkwOTQwMjE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1NTgyNTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYSBmZXcga2V5IG9wZXJhdGlvbnMgaGVyZSwgYW5kIHRoZSBudWFuY2VzIGJldHdlZW4gdGhlbSBhcmUgaW1wb3J0YW50LiBGaXJzdCwgdGhlcmUncyBgZXh0NF9mbGV4X2dyb3VwX2FkZGAuIEknbSBpbW1lZGlhdGVseSBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIGZvciBtZXRhZGF0YSBsYXlvdXQgYW5kIGhvdyB0aGlzIGFmZmVjdHMgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBmaWxlcyBhbmQgc3BhcnNlIGFsbG9jYXRpb24uIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBpbiB0ZXJtcyBvZiBibG9jayBncm91cCBsYXlvdXQgd2hlbiBhZGRpbmcgYSBmbGV4aWJsZSBncm91cD8gSSBuZWVkIHRvIHdlaWdoIHRoZSBiZW5lZml0cyBvZiByZWR1Y2VkIGZyYWdtZW50YXRpb24gYWdhaW5zdCB0aGUgb3ZlcmhlYWQgb2YgbW9yZSBjb21wbGV4IG1ldGFkYXRhIG1hbmFnZW1lbnQuIFRoZW4sIEknbSBwaXZvdGluZyB0byBgZXh0NF9ncm91cF9hZGRgLiBUaGlzIGlzIHRoZSBtb3JlIGdlbmVyYWwgY2FzZSBvZiBhZGRpbmcgYSBibG9jayBncm91cDsgYXJlIHRoZXJlIGRpZmZlcmVuY2VzIGluIHRoZSBhbGdvcml0aG1zIGZvciBhbGxvY2F0aW5nIHRoZSBuZXcgYmxvY2sgZ3JvdXAgdnMgYSBmbGV4aWJsZSBncm91cD8gUGVyaGFwcyB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIG9uIGV4aXN0aW5nIGJsb2NrIGdyb3VwIGxheW91dCBvciBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24sIGFuZCB0aGVzZSBjYW4gaW5mb3JtIGRlY2lzaW9ucyBhYm91dCB0aGUgYmVzdCBhcHByb2FjaC4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBleHQ0X3Jlc2l6ZV9mc2AuIEFyZSB0aGVzZSBhZGRpdGlvbnMgcGFydCBvZiBhIHJlc2l6ZSBvcGVyYXRpb24/IElmIHNvLCB0aGUgY29uc3RyYWludHMgb2YgdGhlIHJlc2l6ZSAoZS5nLiwgd2hldGhlciBpdCdzIGFuIG9ubGluZSBvciBvZmZsaW5lIHJlc2l6ZSkgd2lsbCBkaWN0YXRlIHRoZSBhdmFpbGFibGUgc3RyYXRlZ2llcyBmb3IgYWRkaW5nIGJsb2NrIGdyb3Vwcy4gSXQncyBhIHF1ZXN0aW9uIG9mIGhvdyB0byBleHRlbmQgdGhlIGZpbGUgc3lzdGVtIGVmZmVjdGl2ZWx5LCB3aGlsZSBtaW5pbWl6aW5nIGRpc3J1cHRpb24gdG8gb25nb2luZyBJL08gb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkuIFRoZSBnb2FsIGlzIGVmZmljaWVudCBhbmQgcm9idXN0IGZpbGUgc3lzdGVtIGV4cGFuc2lvbiwgYW5kIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGNvcnJlY3QgYWRkaXRpb24gcHJvY2VkdXJlIGlzIGNyaXRpY2FsIHRvIGFjaGlldmluZyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjIwLjI0Njc2NzcyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjE2MDA5OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKmV4dDRfcmVzaXplX2ZzXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzI4Nj1leHRlcm4gaW50IGV4dDRfZ3JvdXBfZXh0ZW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zMjg4LVxcdFxcdFxcdFxcdGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzI4OTpleHRlcm4gaW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7XFxuZnMvZXh0NC9leHQ0LmgtMzI5MC1leHRlcm4gdW5zaWduZWQgaW50IGV4dDRfbGlzdF9iYWNrdXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jPTE5MTI9c3RhdGljIGludCBleHQ0X2NvbnZlcnRfbWV0YV9iZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xOTk4LSAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MTk5OTppbnQgZXh0NF9yZXNpemVfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IG5fYmxvY2tzX2NvdW50KVxcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjI4LjgwODM3MjUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDQzODE1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIEZpbGVzeXN0ZW0gUmVzaXppbmcqKlxuXG5Pa2F5LCBgZXh0NF9yZXNpemVfZnNgIGZlZWxzIGxpa2UgYSBnb29kLCBzb2xpZCBwb2ludCB0byBiZWdpbiBmb2N1c2luZyBteSBhdHRlbnRpb24uIEl0J3MgYSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSByZXNpemluZyBwcm9jZXNzIGFuZCBsaWtlbHkgaW52b2x2ZXMgbnVtZXJvdXMgY3J1Y2lhbCBpbnRlcmFjdGlvbnMuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoYXQsIGEgcXVpY2sgY2hlY2staW4uIExldCdzIHNlZSBob3cgYHBpZGZkX2luZm9gIHRpZXMgaW50byB0aGlzLiBQZXJoYXBzIHRoZSBQSURGRCBpbmZvcm1hdGlvbiBoYXMgc29tZSByZWxldmFudCBhc3BlY3RzIHdpdGggaG93IHByb2Nlc3NlcyBpbnRlcmFjdCBkdXJpbmcgZmlsZXN5c3RlbSByZXNpemluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozNzozMy43MTI3NTY1MDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzYxNzIzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKnBpZGZkX2luZm9cXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTMzOT1zdGF0aWMgX191MzIgcGlkZnNfY29yZWR1bXBfbWFzayhlbnVtIHRhc2tfZHVtcGFibGUgZHVtcGFibGUpXFxuLS1cXG5mcy9waWRmcy5jLTM2NC1cXG5mcy9waWRmcy5jOjM2NTpzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9waWRmcy5jLTM2Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjQyLjE4ODkzNTg2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU0MzcwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhpcyBkb21haW46XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gYHBpZGZkX2luZm9gKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHBpZGZkX2luZm9gIGhlcmUuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCBpdCdzIGEgKipzdGF0aWMqKiBzdHJ1Y3R1cmUgb3IgdmFyaWFibGUuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIG1lLiBGaXJzdCwgaXRzIHNjb3BlIGlzIGxpa2VseSBsaW1pdGVkLCBwcm9iYWJseSB3aXRoaW4gYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBzb3VyY2UgZmlsZS4gQW5kIHNlY29uZGx5LCBzaW5jZSBpdCdzIHN0YXRpYywgaXQncyB2ZXJ5IGxpa2VseSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGFueSBkYXRhIGl0IGhvbGRzIHdvbid0IGNoYW5nZSBkeW5hbWljYWxseSB1bmxlc3MgdGhlIGNvZGUgZXhwbGljaXRseSB1cGRhdGVzIGl0LlxuXG5BbmQgd2hlcmUgZG9lcyBpdCBjb21lIGludG8gcGxheT8gQWgsIHllcywgaXTigJlzIHVzZWQgd2l0aGluIGBwaWRmZF9pb2N0bGAuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgbWVhbnMgdGhhdCB3aGVuZXZlciB3ZeKAmXJlIGRlYWxpbmcgd2l0aCB0aGUgYHBpZGZkX2lvY3RsYCBzeXN0ZW0gY2FsbCwgdGhlIGNvbnRlbnRzIG9mIGBwaWRmZF9pbmZvYCBhcmUgbGlrZWx5IGJlaW5nIGFjY2Vzc2VkIG9yIG1vZGlmaWVkIGluIHNvbWUgd2F5LiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYHBpZGZkX2lvY3RsYCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZCwgYnV0IHRoaXMgY29ubmVjdGlvbiBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGxpa2VseSBjb250YWlucyBjcnVjaWFsIGluZm9ybWF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIG9mIHRoZSBpb2N0bCBjYWxsLCB3aGljaCBpcyB0eXBpY2FsbHkgZm9yIHByb2Nlc3MgbWFuYWdlbWVudCBvciByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgZGF0YSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM3OjQ2LjY0MzMwOTM4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NTE3ODMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcGlkZmRfaW9jdGxcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTQ5Nz1zdGF0aWMgYm9vbCBwaWRmc19pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxuZnMvcGlkZnMuYy01MjctXFxuZnMvcGlkZnMuYzo1Mjg6c3RhdGljIGxvbmcgcGlkZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL3BpZGZzLmMtNTI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzc6NTUuMDE4NDk0MzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTg2NTM4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6XG5cbioqRXhhbWluaW5nIGBwaWRmZF9pb2N0bGAgYW5kIFBvdGVudGlhbCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBgcGlkZmRfaW9jdGxgIGlzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBqdXN0IGxpa2UgdGhlIG90aGVycy4gSXQncyB0aGUgYGlvY3RsYCBoYW5kbGVyIGZvciB0aGUgcGlkZnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IEkgY2FuIGxldmVyYWdlIGluc3RlYWQ/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHVzaW5nIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGludGVyZmFjZS4gQWgsIHdhaXQgYSBtaW51dGUsIEkgcmVtZW1iZXIgbm93ISBgcGlkZmRfaW9jdGxgIGlzIGFjdHVhbGx5IHJlZ2lzdGVyZWQgd2l0aGluIGBwaWRmc19maWxlX29wZXJhdGlvbnNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCBjbGFyaWZpZXMgaXRzIHVzYWdlIHdpdGhpbiB0aGUgcGlkZnMgY29udGV4dC4gR2l2ZW4gdGhhdCwgdXNpbmcgYHBpZGZkX2lvY3RsYCBkaXJlY3RseSBzaG91bGQgYmUgcGVyZmVjdGx5IGFjY2VwdGFibGUsIG9yIHBvdGVudGlhbGx5IGBzeXNfcGlkZmRfb3BlbmAuIFVsdGltYXRlbHksIHRob3VnaCwgYHBpZGZkX2lvY3RsYCBzZWVtcyBsaWtlIHRoZSBiZXN0IGZpdCBoZXJlLCBnaXZlbiBteSBjdXJyZW50IG5lZWQuIEFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhhdCBkaXJlY3Rpb24gbm93LiBOZXh0LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1hcF93cml0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzgyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MDAuMDE3MTUxNTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg3NjcyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSptYXBfd3JpdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz04OTA9c3RhdGljIGJvb2wgdmVyaWZ5X3Jvb3RfbWFwKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtOTMxLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjkzMjpzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtOTMzLVxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MDguNTA0ODI3NzcyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTM0NTk5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IGFyZSBteSBvd246XG5cbioqTXkgTWVudGFsIE1vZGVsIG9mIGBtYXBfd3JpdGVgKipcblxuUmlnaHQsIHNvIGBtYXBfd3JpdGVgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhIHByZXR0eSBjb21tb24gcGF0dGVybiBmb3IgZnVuY3Rpb25zIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIGEgc3BlY2lmaWMgY29udGV4dC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyAqc3RhdGljKjsgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgd2hlcmUgaXQncyBkZWZpbmVkLCB3aGljaCBvZnRlbiBpbXBsaWVzIHNvbWUgc3BlY2lmaWMgYWNjZXNzIGNvbnRyb2wgb3IgdGhhdCBpdCdzIGNsb3NlbHkgdGllZCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuVGhlbiBJIGxvb2sgYXQgd2hlcmUgaXQgaXMgY2FsbGVkIGZyb20uIEFoYSEgYHByb2NfdWlkX21hcF93cml0ZWAsIGBwcm9jX2dpZF9tYXBfd3JpdGVgLCBhbmQgYHByb2NfcHJvamlkX21hcF93cml0ZWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBgbWFwX3dyaXRlYCBpcyB0aGUgKmNvcmUqIHdyaXRlciBmdW5jdGlvbiBmb3IgKm1hcHBpbmdzKiBvZiBVSURzLCBHSURzLCBhbmQgcHJvaklEcy4gVGhvc2UgYHByb2NfKl9tYXBfd3JpdGVgIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdGhlIGVudHJ5IHBvaW50cyBmb3Igd3JpdGluZyB0aGVzZSBJRCBtYXBwaW5ncyBpbnRvIHRoZSBrZXJuZWwncyBwcm9jZXNzIG5hbWVzcGFjZXMsIGVpdGhlciB2aWEgYC9wcm9jYCBmaWxlc3lzdGVtIGVudHJpZXMgb3IgYSByZWxhdGVkIGludGVyZmFjZS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHBhdHRlcm4gaXMgcHJldHR5IHN0YW5kYXJkLCBJIGNhbiBleHBlY3QgdGhlIGBtYXBfd3JpdGVgIHRvIGxpa2VseSBiZSBkZWFsaW5nIHdpdGggdGhlIGFjdHVhbCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLiBJdHMgc3RhdGljLW5lc3MgcmVpbmZvcmNlcyB0aGlzIGRlc2lnbiwgYXMgaXQncyB0aGUgY29yZSB3b3JraG9yc2UsIGFuZCB0aGUgbmFtZXNwYWNlLXNwZWNpZmljIHdyaXRlcnMgaGFuZGxlIGFueSB2YWxpZGF0aW9uIG9yIHNldHVwLiBJIGNhbiBndWVzcyB0aGVyZSBpcyBkYXRhIHNhbml0aXphdGlvbiBnb2luZyBvbiBpbiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGV5IGhhbmRsZSBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MTMuNTE4Mjk0MTg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk1MDMxODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSpwcm9jX3VpZF9tYXBfd3JpdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmg9MTk5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJvY19wcm9qaWRfc2VxX29wZXJhdGlvbnM7XFxuaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oOjIwMDpleHRlcm4gc3NpemVfdCBwcm9jX3VpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XFxuaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oLTIwMS1leHRlcm4gc3NpemVfdCBwcm9jX2dpZF9tYXBfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz05MzI9c3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEyMS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMTIyOnNzaXplX3QgcHJvY191aWRfbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTExMjMtXFx0XFx0XFx0ICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcHBvcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6MjEuOTEzMzMzNjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDg2OTc1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRm9jdXNpbmcgSW4gb24gdGhlIEtlcm5lbCdzIElTTy1UUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGBwcm9jX3VpZF9tYXBfd3JpdGVgIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgbGVhZCwgYnV0IGxldCdzIHRha2UgYSBxdWljayBkZXRvdXIgYW5kIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSBtb3JlIHJlbGV2YW50IHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgaXNvdHBfc2VuZG1zZ2AuIFdoaWxlIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGlzIGltcG9ydGFudCBmb3Igc2VjdXJpdHkgYW5kIHVzZXItSUQgbWFwcGluZyB3aXRoaW4gdGhlIHByb2Nlc3MgY29udGV4dCwgYGlzb3RwX3NlbmRtc2dgIGhhbmRsZXMgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgSVNPLVRQIG1lc3NhZ2VzLCBzbyBpdCdzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIElTTy1UUCBpbXBsZW1lbnRhdGlvbiBsaWVzLiBLbm93aW5nIGhvdyB0aGF0IHdvcmtzIHdpbGwgbGlrZWx5IGluZm9ybSB0aGUgcmVzdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjI1LjQyMjAzNDcyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NTI4Njc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqaXNvdHBfc2VuZG1zZ1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vaXNvdHAuYz0xMDg4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMTEwMy1cXG5uZXQvY2FuL2lzb3RwLmM6MTEwNDpzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvY2FuL2lzb3RwLmMtMTEwNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjMzLjg5NzMyNzY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NjAzMzU2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVNPVFAgYW5kIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgaXNvdHBfc2VuZG1zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHJlZ2lzdGVyZWQgd2l0aGluIGBpc290cF9vcHNgLiBUaGF0J3MgZ29vZDsgaXQncyBhIGtub3duIHF1YW50aXR5LiBJIHdhcyBicmllZmx5IGNvbnNpZGVyaW5nIHdoZXRoZXIgYGlzb3RwX2JpbmRgIG9yIGBpc290cF9zZXRzb2Nrb3B0YCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBwZXJoYXBzIG5vbi1zdGF0aWMsIGNhbmRpZGF0ZXMgZm9yIGZvY3VzZWQgYW5hbHlzaXMuIEJ1dCwgYXMgdGhlIHNlbmRtc2cgaGFuZGxlciwgYGlzb3RwX3NlbmRtc2dgIHNlZW1zIHBlcmZlY3RseSBmaW5lLiBUaGUgZnV6emVyIHVuZGVyc3RhbmRzIGhvdyB0byBpbnRlcmFjdCB3aXRoIENBTiBJU09UUCBzb2NrZXRzIHZpYSBgc2VuZG1zZ2AsIHNvIHRhcmdldGluZyB0aGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgdGNmX2dhY3RfaW5pdGAuIFNlZSB3aGF0IHRoYXQgY2FuIHRlbGwgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjM5LjY1NzY2NTY0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1NTY4ODc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqdGNmX2dhY3RfaW5pdFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2FjdC5jPTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBnYWN0X3BvbGljeVtUQ0FfR0FDVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTUwLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjUxOnN0YXRpYyBpbnQgdGNmX2dhY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy01Mi1cXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzg6NDguMDEzMzU4OTY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDA0NTIxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqQW5hbHl6aW5nIHRoZSBHbG9iYWwgQWN0aW9uIENsYXNzaWZpZXIgKEdBQykgSW5pdGlhbGl6YXRpb24gYW5kIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdGNmX2dhY3RgIGNvZGUuIEkgc2VlIHRoYXQgdGhlIGB0Y2ZfZ2FjdF9pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgR0FDLCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci4gSSd2ZSBhbHNvIHRyYWNrZWQgZG93biB0aGF0IGl0J3MgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIHZpYSBgYWN0X2dhY3Rfb3BzLmluaXRgLiBNYWtlcyBzZW5zZSwgc28gZmFyLlxuXG5Ob3cgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnQuIEkndmUgZm91bmQgYHRjZl9nYWN0X2FjdGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpwZXJmb3JtcyogdGhlIGFjdGlvbiBvciBwcm9jZXNzaW5nLiBUaGUgY3JpdGljYWwgZGV0YWlsIGhlcmUgaXMgdGhhdCBpdCdzIG1hcmtlZCBhcyBgVENfSU5ESVJFQ1RfU0NPUEVgLiBUaGlzIHRocm93cyBhIGJpdCBvZiBhIGN1cnZlYmFsbC4gV2hhdCB0aGF0ICp0eXBpY2FsbHkqIG1lYW5zIGlzIHRoYXQgYHRjZl9nYWN0X2FjdGAgaXMgbm9uLXN0YXRpYyAoYXZhaWxhYmxlIGV4dGVybmFsbHkpLCAqdW5sZXNzKiB0aGV5J3ZlIGRpc2FibGVkIGluZGlyZWN0IGNhbGxzLCBhdCB3aGljaCBwb2ludCBpdCdzIHVzdWFsbHkgYHN0YXRpY2AsIG9yIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBzZWUgd2hpY2ggaXMgdGhlIGNhc2UuIEJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLCBpdCBjb3VsZCBiZSBjYWxsZWQgZGlyZWN0bHksIGluZGlyZWN0bHkgb3IgaXQgaXMgc3RhdGljIGFuZCBub3QgY2FsbGVkIGV4dGVybmFsbHkuIFRoaXMgaW1wYWN0cyBob3cgYW5kIHdoZXJlIHRoZSBHQUMgY2FuIGJlIGludm9rZWQuIEkgaGF2ZSB0byBsb29rIGEgbGl0dGxlIGRlZXBlciB0byBzZWUgaG93IGl0J3MgYWN0dWFsbHkgdXNlZCBpbiBhIHByYWN0aWNhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM4OjUzLjI1MzgxNDU0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NjgwMjIzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKnRjZl9nYWN0X2FjdFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTowMS44MDA2MjQ1ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0ODcwNjc3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyB0aGF0IERpZmY6IFRDX0lORElSRUNUX1NDT1BFIGFuZCBza2IqKlxuXG5Pa2F5LCB0aGUgZGlmZuKApiBoYW5nIG9uLiBgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYWN0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLGAgLi4uIHRoYXQgbGluZSBqdW1wcyBvdXQgYXQgbWUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuIGB0Y2ZfZ2FjdF9hY3RgLCB0aGF0J3MgdGhlIGdlbmVyaWMgYWN0aW9uIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yaywgcmlnaHQ/IEFuZCBgc2tiYCwgb2YgY291cnNlLCBpcyB0aGUgY3J1Y2lhbCBzb2NrZXQgYnVmZmVyLiBCdXQgdGhlIGBUQ19JTkRJUkVDVF9TQ09QRWAgaXMgd2hhdCBoYXMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNoYW5nZSBoYXMgb2NjdXJyZWQgYXJvdW5kIHRoaXMgZnVuY3Rpb24gY2FsbC4gV2hhdOKAmXMgdXNpbmcgaXQ/IFdoeSBpcyBpdCB0aGVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOToxNy4yODc2OTQ4NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjIyNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9nYWN0X2FjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhY3QuYz01MT1zdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0xMzMtXFx0XFx0Z2FjdC1cXHUwMDNldGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tXFx1MDAzZXB2YWwpO1xcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjEzNDpcXHRcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0Y2ZfZ2FjdF9hY3QoKS4gKi9cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0xMzUtXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZmdfcHR5cGUsIHBfcGFybS1cXHUwMDNlcHR5cGUpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMTQ4LVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjE0OTpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMTUwLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYz0yODg9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTI5MS1cXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MjkyOlxcdC5hY3RcXHRcXHQ9XFx0dGNmX2dhY3RfYWN0LFxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTI5My1cXHQuc3RhdHNfdXBkYXRlXFx0PVxcdHRjZl9nYWN0X3N0YXRzX3VwZGF0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mzk6MTcuMzU0MzIxNjA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMjczNzU5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEFzeW5jaHJvbm91cyBJL08gTWVjaGFuaXNtcyoqXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGB0Y2ZfZ2FjdF9hY3RgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciBteSBjdXJyZW50IGxpbmUgb2YgaW5xdWlyeS4gV2hlcmUgZG9lcyB0aGlzIGdvPyBEb2VzIGl0IHRpZSBpbnRvIHRoZSBhc3luY2hyb25vdXMgSS9PIHBhdGh3YXlzP1xuXG5IbW0sIEknbSBhbHNvIHRoaW5raW5nIG9mIGBmcy9haW8uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYXN5bmNocm9ub3VzIEkvTy4gSSdtIHJlY2FsbGluZyB0aGF0IGBhaW9fcmVhZF9ldmVudHNfcmluZ2AgZ2V0cyBjYWxsZWQgZnJvbSBgcmVhZF9ldmVudHNgLiBTbywgdGhhdCBzZWVtcyBrZXksIHNpbmNlIGl0J3MgaW52b2x2ZWQgaW4gcmVhZGluZyBldmVudHMgcmVsYXRlZCB0byBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbCBjaGFpbiBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGV2ZW50IGhhbmRsaW5nIGZsb3cuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0Y2ZfZ2FjdF9hY3RgIGFuZCBhc3luY2hyb25vdXMgSS9PLiBJIG11c3QgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOToyNC4zODE2OTk3NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0Mzc3NDQ0ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oW2EtejAtOV9dKyApKnJlYWRfZXZlbnRzXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MTM0Nj1zdGF0aWMgYm9vbCBhaW9fcmVhZF9ldmVudHMoc3RydWN0IGtpb2N0eCAqY3R4LCBsb25nIG1pbl9uciwgbG9uZyBucixcXG4tLVxcbmZzL2Fpby5jLTEzNjItXFxuZnMvYWlvLmM6MTM2MzpzdGF0aWMgbG9uZyByZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxcbmZzL2Fpby5jLTEzNjQtXFx0XFx0XFx0c3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsXFxuLS1cXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmM9MTQ5MT1zdGF0aWMgaW50IGt2bV9saXZlX29wZW5fZXZlbnRzKHN0cnVjdCBwZXJmX2t2bV9zdGF0ICprdm0pXFxuLS1cXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmMtMTU1MS1cXG50b29scy9wZXJmL2J1aWx0aW4ta3ZtLmM6MTU1MjpzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHN0cnVjdCBwZXJmX2t2bV9zdGF0ICprdm0pXFxudG9vbHMvcGVyZi9idWlsdGluLWt2bS5jLTE1NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTozMi44MTk0NDg2NjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjAyNjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipTdGF0aWMgRnVuY3Rpb24gRGVlcCBEaXZlOiBgcmVhZF9ldmVudHNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGByZWFkX2V2ZW50c2AgaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLiBUaGlzIGlzbid0IHN1cnByaXNpbmcgZ2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGEgbG93LWxldmVsIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIGl0J3Mgc3RhdGljIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2hlcmUgaXQncyBkZWZpbmVkLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBJL08gZXZlbnQgaGFuZGxpbmcuXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgZmFjdCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYHN5c19pb19nZXRldmVudHNgIHN0cm9uZ2x5IGltcGxpZXMgYSBjb3JlIGZ1bmN0aW9uIHdpdGhpbiB0aGUgSS9PIGV2ZW50IHJldHJpZXZhbCBzeXN0ZW0uIFRoaXMgc2V0dXAgaXMgdHlwaWNhbDsgYHN5c19pb19nZXRldmVudHNgIGlzIGxpa2VseSB0aGUgZXhwb3NlZCBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgdGhhdCB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGgsIGFuZCBgcmVhZF9ldmVudHNgIGlzIHRoZSB1bmRlcmx5aW5nIHdvcmtob3JzZSB0aGF0IGFjdHVhbGx5IHB1bGxzIHRoZSBldmVudCBkYXRhLiBNeSBmb2N1cyBub3cgaXMgb24gdW5kZXJzdGFuZGluZyAqaG93KiBpdCBwcm9jZXNzZXMgdGhlIHJlcXVlc3QgYW5kICp3aGF0KiBvcHRpbWl6YXRpb25zIGl0IHVzZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBpZiB0aGlzIHN0YXRpYyBuYXR1cmUgaXMgY29uY2VhbGluZyBhbnkgZGF0YSByYWNlcyBvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgaWYgdGhlIG9wdGltaXphdGlvbiBpcyB0aHJlYWQgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTozNy4zMzU0Nzc4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3NzU4Njk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqc3lzX2lvX2dldGV2ZW50c1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD0zMTQ9YXNtbGlua2FnZSBsb25nIHN5c19pb19jYW5jZWwoYWlvX2NvbnRleHRfdCBjdHhfaWQsIHN0cnVjdCBpb2NiIF9fdXNlciAqaW9jYixcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMzE1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19ldmVudCBfX3VzZXIgKnJlc3VsdCk7XFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjMxNjphc21saW5rYWdlIGxvbmcgc3lzX2lvX2dldGV2ZW50cyhhaW9fY29udGV4dF90IGN0eF9pZCxcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMzE3LVxcdFxcdFxcdFxcdGxvbmcgbWluX25yLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozOTo0NS45MTMwNzEzNDFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyNzc1MjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkZvY3VzaW5nIE15IEFuYWx5c2lzKipcblxuUmlnaHQsIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gVGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHN5bWJvbCB0byByZWFsbHkgZGlnIGludG8uIEl0J3MgYSBrZXkgZW50cnkgcG9pbnQsIGFuZCB0aGF0IG9mdGVuIG1lYW5zIGl0J3MgY2VudHJhbCB0byB0aGUgb3BlcmF0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cbkJ1dCB3YWl0LCB3aGF0IGFib3V0IGBmcy9maWxlLmNgPyBUaGF0IGZlZWxzIGxpa2UgYSByZWxldmFudCBhcmVhIHRvIGV4YW1pbmUgdG9vLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgSS9PLiBJIGJldCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGxvdy1sZXZlbCBpbnRlcmFjdGlvbiBkZXRhaWxzLiBBaCwgYW5kIGhlcmUncyBhIHBvdGVudGlhbGx5IHVzZWZ1bCBub3RlLCBgZXhwYW5kX2ZpbGVzYCBpcyBjYWxsZWQgZnJvbSBgYWxsb2NfZmRgLiBHb29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM5OjUwLjg0MDgyNTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjU5NDE0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSphbGxvY19mZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZpbGUuYz01NDM9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfZmQoc3RydWN0IGZkdGFibGUgKmZkdCwgdW5zaWduZWQgaW50IHN0YXJ0KVxcbi0tXFxuZnMvZmlsZS5jLTU2Ny0gKi9cXG5mcy9maWxlLmM6NTY4OnN0YXRpYyBpbnQgYWxsb2NfZmQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgZmxhZ3MpXFxuZnMvZmlsZS5jLTU2OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM5OjU5LjUwMDI0NzE3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE3NDc2NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgYGFsbG9jX2ZkYCBGdW5jdGlvbidzIFNjb3BlIGFuZCBVc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhbGxvY19mZGAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaGFzIGludGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0J3MgZGVmaW5lZC4gVGhpcyBpcyBhIGNydWNpYWwgZGVzaWduIGNob2ljZSwgbGlrZWx5IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGZpbGUgZGVzY3JpcHRvciBhbGxvY2F0aW9uIGxvZ2ljIGFuZCBwcmV2ZW50IGFjY2lkZW50YWwgbWlzdXNlIG9yIG1vZGlmaWNhdGlvbiBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLiBJdCBhbHNvIGltcGxpZXMgaXQncyBub3QgYSBmdW5jdGlvbiB0aGF0J3MgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBmb3IgZ2VuZXJhbCB1c2UuXG5cbk5vdywgdGhlIGNvZGUgbWVudGlvbnMgdGhhdCBgYWxsb2NfZmRgIGlzIGNhbGxlZCBmcm9tIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYC4gVGhpcyBpcyB0aGUga2V5LiBHaXZlbiB0aGF0LCBJIGNhbiBkZWR1Y2UgdGhhdCBgZ2V0X3VudXNlZF9mZF9mbGFnc2AgbGlrZWx5IHBlcmZvcm1zIHNvbWUgaGlnaGVyLWxldmVsIHRhc2sgaW52b2x2aW5nIGZpbmRpbmcgb3IgY3JlYXRpbmcgYSBmaWxlIGRlc2NyaXB0b3IsIGFuZCBgYWxsb2NfZmRgIGlzIHRoZSBsb3ctbGV2ZWwgdXRpbGl0eSBmdW5jdGlvbiBpdCBjYWxscyB0byBhY3R1YWxseSBncmFiIGFuIGF2YWlsYWJsZSBkZXNjcmlwdG9yLiBgZ2V0X3VudXNlZF9mZF9mbGFnc2AgcHJvYmFibHkgc2V0cyBmbGFncyBkdXJpbmcgdGhpcyBhbGxvY2F0aW9uLCB0aG91Z2ggd2l0aG91dCBhIGxvb2sgYXQgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBJIGNhbiBvbmx5IHNwZWN1bGF0ZSBvbiB0aGUgZGV0YWlscy5cblxuVGhlIGZhY3QgdGhhdCB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBpbnRlcnR3aW5lZCB0ZWxscyBtZSB0aGVyZSdzIHByb2JhYmx5IGEgdGlnaHQgY291cGxpbmcgYmV0d2VlbiB0aGUgdGFzayBvZiAqZmluZGluZyogdGhlIGRlc2NyaXB0b3IgKGluIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCksICphbGxvY2F0aW5nKiBpdCAodXNpbmcgYGFsbG9jX2ZkYCksIGFuZCBwb3RlbnRpYWxseSBzZXR0aW5nIGZsYWdzIG9uIHRoZSBuZXcgZGVzY3JpcHRvci4gTWFrZXMgc2Vuc2UuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgbW9kdWxhcml0eSBvZiB0aGUgY29kZSBhIGJpdCBiZXR0ZXIuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGF0IGBhbGxvY19mZGAgaXMgYSAqdmVyeSogaW1wb3J0YW50IHV0aWxpdHkgZm9yIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjA0LjYxNzcyNjc4OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5NTU4NzIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqZ2V0X3VudXNlZF9mZF9mbGFnc1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZpbGUuYz02MTM9aW50IF9fZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgbG9uZyBub2ZpbGUpXFxuLS1cXG5mcy9maWxlLmMtNjE3LVxcbmZzL2ZpbGUuYzo2MTg6aW50IGdldF91bnVzZWRfZmRfZmxhZ3ModW5zaWduZWQgZmxhZ3MpXFxuZnMvZmlsZS5jLTYxOS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD05MT1leHRlcm4gaW50IF9fZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgbG9uZyBub2ZpbGUpO1xcbmluY2x1ZGUvbGludXgvZmlsZS5oOjkyOmV4dGVybiBpbnQgZ2V0X3VudXNlZF9mZF9mbGFncyh1bnNpZ25lZCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9maWxlLmgtOTMtZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9mZCh1bnNpZ25lZCBpbnQgZmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MDoxMy4zMTMzMTg5MzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NTYxOTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gU29ja2V0IFJldXNlIGFuZCBVbnVzZWQgRmlsZSBEZXNjcmlwdG9ycyoqXG5cbk9rYXksIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCDigJMgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCwgc29saWQgcG9pbnQgdG8gc3RhcnQgd2l0aC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyBmaWxlIGRlc2NyaXB0b3JzLCBhbmQgdGhhdCdzIG9mdGVuIHdoZXJlIHNvY2tldCByZXVzZSB0b3VjaGVzIHRoaW5ncy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgcmVsYXRlZCB0byB0aGUgcmV1c2Vwb3J0IGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIGNvbnNpZGVyIGBuZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jYC4gKlRoYXQncyogd2hlcmUgdGhlIGNvcmUgcmV1c2Vwb3J0IGxvZ2ljIHJlc2lkZXMsIHNvIHRoYXQncyBvYnZpb3VzbHkgcmVsZXZhbnQuIEkgc2VlIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGFuZCBgcmV1c2Vwb3J0X21pZ3JhdGVfc29ja2AgYXJlIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBhbmQgdGhlIGZpbGUgZGVzY3JpcHRvciBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSwgYW5kIGhvdyB0aGV5IGhhbmRsZSB0aGUgc3RhdGUgb2Ygc29ja2V0cy4gQXJlIHdlIGNyZWF0aW5nIG5ldyBGRHMsIG1pZ3JhdGluZyBleGlzdGluZyBvbmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBkZWVwZXIgZGl2ZSBpcyBkZWZpbml0ZWx5IGluIG9yZGVyIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDA6MTkuODg4OTQxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE4MjE3ODA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjI4LjQwNzE2NzQ2NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkxNjI5MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIFRoYXQgRGlmZioqXG5cbk9rYXksIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIE15IGluaXRpYWwgcGFzcyB3YXMgcXVpY2ssIGJ1dCBzb21ldGhpbmcncyBuYWdnaW5nIGF0IG1lLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IEkgc2F3IGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGluIHRoZSBjaGFuZ2VzLiBUaGF0J3Mgbm90IGp1c3QgYW55IHJhbmRvbSBmdW5jdGlvbiBvciB2YXJpYWJsZS4gSXQncyBhIGtleSBwaWVjZSB3aGVuIG9wdGltaXppbmcgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgc29ja2V0IGJpbmRpbmcuIFwicmV1c2Vwb3J0LFwiIG9mIGNvdXJzZSwgaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIEkgd29uZGVyIHdoeSB0aGlzIGlzIHJlbGV2YW50LiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIG9yIG1heWJlIGEgY29ycmVjdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dCBvZiB3aGVyZSBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBpcyBiZWluZyBpbXBsZW1lbnRlZC4gSXMgdGhpcyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgc2NhbGFiaWxpdHkgYm90dGxlbmVjaz8gQSBwYXJ0aWN1bGFyIGVkZ2UgY2FzZT8gTGV0J3MgdHJhY2UgYmFjayB3aGVyZSB0aGlzIGNoYW5nZSBmaXRzIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBhbmQgc2VlIHRoZSBvdmVyYWxsIHJhdGlvbmFsZS4gSXQgY291bGQgY29tcGxldGVseSBjaGFuZ2UgdGhlIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjQzLjMyMzQ2MTY3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1MzgxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmV1c2Vwb3J0X3NlbGVjdF9zb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYz00MD1zdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9nZXRfaW5jb21pbmdfY3B1KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UpXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00MS17XFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo0MjpcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLiAqL1xcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNDMtXFx0V1JJVEVfT05DRShyZXVzZS1cXHUwMDNlaW5jb21pbmdfY3B1LCByZXVzZS1cXHUwMDNlaW5jb21pbmdfY3B1ICsgMSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTQ2PXN0YXRpYyB2b2lkIF9fcmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSlcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTQ3LXtcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjQ4OlxcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRSgpIGluIHJldXNlcG9ydF9zZWxlY3Rfc29ja19ieV9oYXNoKCkuICovXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy00OS1cXHRXUklURV9PTkNFKHJldXNlLVxcdTAwM2VpbmNvbWluZ19jcHUsIHJldXNlLVxcdTAwM2VpbmNvbWluZ19jcHUgLSAxKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM9NjQ9dm9pZCByZXVzZXBvcnRfdXBkYXRlX2luY29taW5nX2NwdShzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTgyLVxcdCAqXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo4MzpcXHQgKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaCgpLlxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtODQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTQ5Nz1zdGF0aWMgc3RydWN0IHNvY2sgKnJ1bl9icGZfZmlsdGVyKHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UsIHUxNiBzb2NrcyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNTI2LVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmM6NTI3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X3NlbGVjdF9zb2NrX2J5X2hhc2goc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSxcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTUyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBoYXNoLCB1MTYgbnVtX3NvY2tzKVxcbi0tXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NTgtLyoqXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo1NTk6ICogIHJldXNlcG9ydF9zZWxlY3Rfc29jayAtIFNlbGVjdCBhIHNvY2tldCBmcm9tIGFuIFNPX1JFVVNFUE9SVCBncm91cC5cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTU2MC0gKiAgQHNrOiBGaXJzdCBzb2NrZXQgaW4gdGhlIGdyb3VwLlxcbi0tXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NjctICovXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYzo1Njg6c3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy01NjktXFx0XFx0XFx0XFx0ICAgdTMyIGhhc2gsXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTU5OS1cXHRcXHRpZiAoIXNrMilcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjYwMDpcXHRcXHRcXHRzazIgPSByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaChyZXVzZSwgaGFzaCwgc29ja3MpO1xcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjAxLVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjA2LX1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjYwNzpFWFBPUlRfU1lNQk9MKHJldXNlcG9ydF9zZWxlY3Rfc29jayk7XFxubmV0L2NvcmUvc29ja19yZXVzZXBvcnQuYy02MDgtXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jPTYxOD1zdHJ1Y3Qgc29jayAqcmV1c2Vwb3J0X21pZ3JhdGVfc29jayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jLTY2MS1cXHRpZiAoIW5zaylcXG5uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jOjY2MjpcXHRcXHRuc2sgPSByZXVzZXBvcnRfc2VsZWN0X3NvY2tfYnlfaGFzaChyZXVzZSwgaGFzaCwgc29ja3MpO1xcbm5ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMtNjYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MDo0My40MTIwMDY3NDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0NDA5NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgYW5kIFN0cmluZyBGb3JtYXR0aW5nIFZ1bG5lcmFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHNvIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCBhbmQgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoYXQncyB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24gdG8gZXZhbHVhdGUgYW55IHBvc3NpYmxlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyByZWxhdGVkIHRvIHNvY2tldCByZXVzZSwgZXNwZWNpYWxseSBpbiBtdWx0aS10aHJlYWRlZCBvciBjb25uZWN0aW9uIHBvb2xpbmcgZW52aXJvbm1lbnRzLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byBzdHJpbmcgZm9ybWF0dGluZyBpc3N1ZXMsIHNvIEkgdGhpbmsgdG8gbXlzZWxmOiBcIkxldCdzIGNoZWNrIGBsaWIvdnNwcmludGYuY2AuXCIgV2h5PyBXZWxsLCBgdnNwcmludGZgIGFuZCBpdHMgdmFyaWFudHMgKGxpa2UgYHZzbnByaW50ZmAsIGBzcHJpbnRmYCBldGMuKSBhcmUgbm90b3Jpb3VzIGZvciBmb3JtYXQgc3RyaW5nIHZ1bG5lcmFiaWxpdGllcy4gSWYgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AgaXMgcGFzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gYSBmb3JtYXQgc3RyaW5nIGZ1bmN0aW9uLCBpdCdzIGEgaHVnZSByZWQgZmxhZy4gRXZlbiBpZiBub3QgZGlyZWN0bHksIEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSBmbG93LlxuXG5NeSBtaW5kIHRoZW4gcXVpY2tseSBqdW1wcyB0byBzZWFyY2hpbmcgZm9yIGEgY29ubmVjdGlvbjogSXMgYGZpbGxfcHRyX2tleWAgaW52b2x2ZWQgaW4gZ2VuZXJhdGluZyB0aGVzZSBrZXlzLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSB2YWd1ZWx5IHJlbWVtYmVyIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgcHRyX2tleV93b3JrZm5gIG9yIHNvbWV0aGluZyBpbiB0aGF0IGRvbWFpbi4gSWYgdGhhdCdzIHRoZSBjYXNlLCBhbmQgYGZpbGxfcHRyX2tleWAgaXMgdXNlZCB0byBjcmVhdGUgb3IgaW5mbHVlbmNlIGFueSBzdHJpbmcgaW5wdXQsIGVzcGVjaWFsbHkgaWYgYSBwb2ludGVyIG9yIGtleSBvciBzaW1pbGFyLCBpbnRvIGEgYHZzcHJpbnRmYCBvciB0aGUgbGlrZSwgdGhhdCBjb3VsZCBiZWNvbWUgYSB2ZWN0b3IuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRhdGEgZmxvdyB0byBiZSBjZXJ0YWluLiBVbHRpbWF0ZWx5LCBJJ20gdGhpbmtpbmc6IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhlIGdlbmVyYXRlZCBrZXkgY291bGQgY29udGFpbiBmb3JtYXQgc3BlY2lmaWVycywgYW5kIG1pZ2h0IHRoaXMgYmUgZXhwbG9pdGFibGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjQ5LjI1NjEwNjE4N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NTI3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9wdHJfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi92c3ByaW50Zi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi92c3ByaW50Zi5jPTc1OT1zdGF0aWMgc2lwaGFzaF9rZXlfdCBwdHJfa2V5IF9fcmVhZF9tb3N0bHk7XFxubGliL3ZzcHJpbnRmLmMtNzYwLVxcbmxpYi92c3ByaW50Zi5jOjc2MTpzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSlcXG5saWIvdnNwcmludGYuYy03NjIte1xcbi0tXFxubGliL3ZzcHJpbnRmLmM9NzcwPXN0YXRpYyBpbnQgX19pbml0IHZzcHJpbnRmX2luaXRfaGFzaHZhbCh2b2lkKVxcbmxpYi92c3ByaW50Zi5jLTc3MS17XFxubGliL3ZzcHJpbnRmLmM6NzcyOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmlsbF9wdHJfa2V5X25iID0geyAubm90aWZpZXJfY2FsbCA9IGZpbGxfcHRyX2tleSB9O1xcbmxpYi92c3ByaW50Zi5jOjc3MzpcXHRleGVjdXRlX3dpdGhfaW5pdGlhbGl6ZWRfcm5nKFxcdTAwMjZmaWxsX3B0cl9rZXlfbmIpO1xcbmxpYi92c3ByaW50Zi5jLTc3NC1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDA6NDkuMzAxNTYzNjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTkzMTI4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipGb2N1c2luZyBJbndhcmQ6IFdoZXJlIERvZXMgVGhpcyBNYXR0ZXI/KipcblxuT2theSwgc28gYGZpbGxfcHRyX2tleWAgaXMganVzdCBhYm91dCBpbml0aWFsaXphdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3QgdGhhdCBjcml0aWNhbC4gQW5kIGBfX3B0cl90b19oYXNodmFsYCBpcyBvbmx5IHRpZWQgdG8gdGhlIGAlcGAgZm9ybWF0dGluZywgd2hpY2gsIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLCBpcyBwcm9iYWJseSBhIG1pbm9yIGRldGFpbCwgYW5kIHRoZXJlZm9yZSBub3QgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBJJ20gZ29pbmcgdG8gc2V0IHRoYXQgYXNpZGUgZm9yIG5vdy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhlIGB2bGFuYCBhcmVhIG1pZ2h0IGJlIGtleS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIHNoaWZ0ZWQgdG8gd2hhdCBjYWxscyBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBhcyBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgIGlzIGFsc28gY2FsbGVkIGZyb20gdGhlcmUuIEkgc2hvdWxkIGxvb2sgaW50byBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIHNlZSB3aGVyZSBJIHNob3VsZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQwOjU0LjU2MDg4MDI5OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2NTA3NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcmVnaXN0ZXJfdmxhbl9kZXZcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvdmxhbi5jPTEyNT1pbnQgdmxhbl9jaGVja19yZWFsX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTE0NS1cXG5uZXQvODAyMXEvdmxhbi5jOjE0NjppbnQgcmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbm5ldC84MDIxcS92bGFuLmMtMTQ3LXtcXG4tLVxcbm5ldC84MDIxcS92bGFuLmg9MTUwPXZvaWQgdmxhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5uZXQvODAyMXEvdmxhbi5oOjE1MTppbnQgcmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvODAyMXEvdmxhbi5oLTE1Mi12b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjAzLjIyNTk2MjYzM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ0MjA3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGByZWdpc3Rlcl92bGFuX2RldmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMgZXhwbG9yYXRpb24uIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgZXh0NF9yZXNpemVfZnNgLCBgcGlkZmRfaW9jdGxgLCBgcHJvY191aWRfbWFwX3dyaXRlYCwgYGlzb3RwX3NlbmRtc2dgLCBgdGNmX2dhY3RfYWN0YCwgYHN5c19pb19nZXRldmVudHNgLCBgZ2V0X3VudXNlZF9mZF9mbGFnc2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBhbmQsIG9mIGNvdXJzZSwgYHJlZ2lzdGVyX3ZsYW5fZGV2YC5cblxuSG1tLCBgc3lzX2lvX2dldGV2ZW50c2AuLi4gcmlnaHQsIHRoYXQncyBhIHN5c2NhbGwuIEltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBrZWVwIGluIG1pbmQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIGB0Y2ZfZ2FjdF9hY3RgLiBBaCwgeWVzLCBjb25maXJtZWQsIHRoYXQncyBpbiBgbmV0L3NjaGVkL2FjdF9nYWN0LmNgLiBHb29kLCBnb29kLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBmdW5jdGlvbnMuIEknbGwgc3RhcnQgd2l0aDpcblxuKiAgIGBleHQ0X3Jlc2l6ZV9mc2A6IHRoYXQncyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19FWFQ0X0ZTYC5cbiogICBgcGlkZmRfaW9jdGxgOiBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBoZXJlLi4uIGlzIGl0IHJlbGF0ZWQgdG8gYENPTkZJR19QSURfSU5fQ09OVEVYVF9TV0lUQ0hFU2A/IE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBPciBwZXJoYXBzIGBDT05GSUdfUElERlNgPyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgcGlkZmRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyNiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MToxMC4yNzAxNzI0MzZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM1OTA3OTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSURGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6MTEuODMzNzY5MDQyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjYwNTA2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlYmFzZSwgYW5kIEkndmUgaGl0IGEgc25hZy4gTXkgYnJhaW4ganVzdCBkaWQgYSBkb3VibGUtdGFrZTsgYGZzL3BpZGZzLmNgLi4ud2FpdCBhIG1pbnV0ZSwgdGhhdCBzb3VyY2UgZmlsZSwgaXQncyBjb21waWxlZCAqY29uZGl0aW9uYWxseSo/IFRoYXQncyBub3QgdGhlIG5vcm0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhdCBwbGF5IGhlcmUuIFdoeSB3b3VsZG4ndCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgdW5pdmVyc2FsbHkgaW5jbHVkZWQ/IElzIHRoZXJlIGFuIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW5jeT8gQSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24/IFNvbWUgc29ydCBvZiBmZWF0dXJlIGZsYWc/IFRoaXMgcmFpc2VzIGFsbCBzb3J0cyBvZiBxdWVzdGlvbnMgYWJvdXQgcG9ydGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUuIElzIHRoZXJlIGFuICNpZmRlZiBibG9jayBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmUgaW52b2x2ZWQ/IFRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGJlaW5nIGRyaXZlbiBmcm9tLCBzaW5jZSBub3cgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGUtdGltZSBkZWNpc2lvbiBjcml0ZXJpYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4OTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MToxOC4yNTk4MjI5NDFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzMwOTA2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGlkZnNcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL01ha2VmaWxlLTE3LVxcdFxcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcXFxcbmZzL01ha2VmaWxlOjE4OlxcdFxcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xOS1cXHRcXHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6MjAuNTMyOTIwMjY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjM4MjI0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKktlcm5lbCBDb21waWxhdGlvbiBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBiaXQgb2YgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4gZ29lcyB0byBjb21waWxhdGlvbi4gSXQgYWx3YXlzIGRvZXMsIHJlYWxseS4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgYHByb2NfdWlkX21hcF93cml0ZWAsIGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBDT05GSUdfVVNFUl9OU2AuIEl0J3MgZW1iZWRkZWQgaW4gbXkgbWluZDogdXNlciBuYW1lc3BhY2VzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCB3aWxsIGJlaGF2ZS4gS25vd2luZyBpdCdzICphbHdheXMqIGNvbXBpbGVkIG1lYW5zIHRoaXMgZGVwZW5kZW5jeSBpcyBoYXJkLXdpcmVkIGFuZCBjYW5ub3QgYmUgb3B0aW9uYWxseSBleGNsdWRlZC4gVGhlcmVmb3JlLCBob3cgaXQgaGFuZGxlcyBjb25maWd1cmF0aW9uIGFuZCBwZXJtaXNzaW9ucyB3aWxsIGJlIGNyaXRpY2FsbHkgYWZmZWN0ZWQgYnkgaG93IGBDT05GSUdfVVNFUl9OU2AgaGFzIGJlZW4gc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjI1LjQ5Njc0NDk4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgyMTQwMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSX05TXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDM4PWNvbmZpZyBJUENfTlNcXG4tLVxcbmluaXQvS2NvbmZpZy0xNDQ1LVxcbmluaXQvS2NvbmZpZzoxNDQ2OmNvbmZpZyBVU0VSX05TXFxuaW5pdC9LY29uZmlnLTE0NDctXFx0Ym9vbCBcXFwiVXNlciBuYW1lc3BhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjI3LjE3ODg4OTIwN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY5OTk3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk15IElTT1RQIFNlbmQgRnVuY3Rpb24ncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgaXNvdHBfc2VuZG1zZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBsb2dpYyBhbmQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcmUgY29udGluZ2VudCBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfQ0FOX0lTT1RQYC4gSXQncyBhIHNpbXBsZSwgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3ksIGJ1dCBpdCdzICpjcml0aWNhbCouIFdpdGhvdXQgYENPTkZJR19DQU5fSVNPVFBgIGVuYWJsZWQgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQsIHRoYXQgYGlzb3RwX3NlbmRtc2dgIGZ1bmN0aW9uIHNpbXBseSB3b24ndCBiZSBjb21waWxlZCwgYW5kIGFueSBhdHRlbXB0IHRvIHVzZSBpdCB3aWxsIGZhaWwgc3BlY3RhY3VsYXJseS4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCBmb3IgZW5zdXJpbmcgdGhlIElTT1RQIHRyYW5zcG9ydCBsYXllciBpcyBhY3R1YWxseSBwcmVzZW50IHdoZW4gdGhlIENBTiBzdWJzeXN0ZW0gYXR0ZW1wdHMgdG8gdXRpbGl6ZSBpdC4gSXQgaXMgcGFyYW1vdW50IHRoYXQgdGhpcyBmZWF0dXJlIGlzIGJvdGggYXZhaWxhYmxlIGFuZCBlbmFibGVkIGZvciB0aGUgYXBwbGljYXRpb24gdG8gZnVuY3Rpb24gYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTozMC4zNDg4ODk0NjRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI1MDEwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTozMi4xMDEzOTUxMDZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUyOTIzODQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgVHJhZmZpYyBTaGFwaW5nIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG5ldHdvcmsgdHJhZmZpYyBzaGFwaW5nIGZ1bmN0aW9uYWxpdGllcywgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIEdlbmVyaWMgQWN0aW9uIChHQUNUKSBtb2R1bGUuIFRoZSBpZGVudGlmaWVyIGB0Y2ZfZ2FjdF9hY3RgIGltbWVkaWF0ZWx5IHNpZ25hbHMgSSdtIGRlYWxpbmcgd2l0aCB0aGUgXCJhY3Rpb25cIiBwYXJ0IG9mIHRoaXMsIHRoZSBmaW5hbCBzdGVwIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKFRDKSBwcm9jZXNzLCBub3QgYSBjbGFzc2lmaWVyIG9yIG90aGVyIHVwc3RyZWFtIGNvbXBvbmVudC4gQW5kIHRoZSBkaXJlY3QgcmVmZXJlbmNlIHRvIGBDT05GSUdfTkVUX0FDVF9HQUNUYCBjb25maXJtcyB0aGF0IEknbSBzcGVjaWZpY2FsbHkgZXZhbHVhdGluZyB0aGUgR0FDVCBtb2R1bGUncyBjb25maWd1cmF0aW9uLiBUaGlzIG1lYW5zIEknbSBmb2N1c2VkIG9uIHdoYXQgYWN0aW9ucyBjYW4gYmUgdGFrZW4gb24gcGFja2V0cyBhZnRlciB0aGV5J3ZlIGJlZW4gY2xhc3NpZmllZCBhbmQgZmlsdGVyZWQuIEl0J3MgYSBrZXkgcGFydCBvZiBpbXBsZW1lbnRpbmcgcG9saWNpZXMsIGZyb20gc2ltcGxlIHBvbGljaW5nIGFuZCBkcm9wcGluZyBwYWNrZXRzIHRvIG1vcmUgY29tcGxleCB0YXNrcy4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMgY3JpdGljYWwuIElmIGl0J3MgZGlzYWJsZWQsIHRoZSBHQUNUIGFjdGlvbiBzaW1wbHkgd29uJ3QgYmUgYXZhaWxhYmxlLCBzZXZlcmVseSBsaW1pdGluZyB0cmFmZmljIGNvbnRyb2wgb3B0aW9ucyBhdCB0aGlzIHBvaW50IGluIHRoZSBwYWNrZXQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTozOS42MzA2MzYxMzRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDU5MjE4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9BQ1RfR0FDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz03MTU9Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MjUtXFxubmV0L3NjaGVkL0tjb25maWc6NzI2OmNvbmZpZyBORVRfQUNUX0dBQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZy03MjctXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgYWN0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6NDEuMzM2NTYyNTc5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTM3Mzg2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3lzX2lvX2dldGV2ZW50c2AgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvIGBDT05GSUdfQUlPYC4gVGhhdCdzIHRoZSBrZXkgY29ubmVjdGlvbiBoZXJlLiBgc3lzX2lvX2dldGV2ZW50c2AgaXMsIG9mIGNvdXJzZSwgdGhlIHN5c3RlbSBjYWxsIGZvciByZXRyaWV2aW5nIGFzeW5jaHJvbm91cyBJL08gKEFJTykgZXZlbnRzLiBUaGlua2luZyBhYm91dCBpdCB0aGlzIHdheSBuYXJyb3dzIGRvd24gdGhlIGNvbnRleHQuIFRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0FJT2AgZGljdGF0ZXMgd2hldGhlciB0aGUgZW50aXJlIEFJTyBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGtlcm5lbC4gU28sIGlmIGBDT05GSUdfQUlPYCBpcyBub3QgZW5hYmxlZCwgYHN5c19pb19nZXRldmVudHNgIGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVkLCByaWdodD9cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTo0NC43NTAzMDQ4ODlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTA4NjI5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNT1jb25maWcgU0hNRU1cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTE1LVxcbmluaXQvS2NvbmZpZzoxOTE2OmNvbmZpZyBBSU9cXG5pbml0L0tjb25maWctMTkxNy1cXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MTo0Ni41MDExNzYxMloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODYyMjIyMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDaGVja2luZyBDb21waWxhdGlvbiBGbGFncyBhbmQgU29ja2V0IFJldXNlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgZ2V0X3VudXNlZF9mZF9mbGFnc2Ag4oCTIHRoYXQgb25lJ3MgYWx3YXlzIGNvbXBpbGVkIGluLCBubyBwcm9ibGVtIHRoZXJlLiBCdXQgd2hhdCBhYm91dCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYD8gSXMgdGhhdCBjb25zaXN0ZW50bHkgcGFydCBvZiB0aGUgYnVpbGQ/IEkgKnRoaW5rKiBpdCBpcywgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY29tcGlsYXRpb24gY29uZmlndXJhdGlvbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIG1ldGljdWxvdXMgYWJvdXQgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb25zIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBNYWtpbmcgc3VyZSBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgY29tcGlsZWQgaXMgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQxOjUxLjM2MzQwMDY5NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNzAxMTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX3JldXNlcG9ydFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTMtXFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE0OlxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE1LVxcdFxcdFxcdGZpYl9ub3RpZmllci5vIHhkcC5vIGZsb3dfb2ZmbG9hZC5vIGdyby5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDE6NTMuOTAwNDE4Nzc4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDA1MzE5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBWTEFOIENvbmZpZ3VyYXRpb24qKlxuXG5ZZXMsIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoZW4gZGVhbGluZyB3aXRoIFZMQU4gY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfVkxBTl84MDIxUWAuIFRoYXQgbWFjcm8sIGlmIGRlZmluZWQsIGlzIHdoYXQgZW5hYmxlcyB0aGUgYHJlZ2lzdGVyX3ZsYW5fZGV2YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIGZvciBWTEFOIGRldmljZSByZWdpc3RyYXRpb24uIFdpdGhvdXQgdGhpcyBiZWluZyBzZXQsIHRoZSBWTEFOIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGdvaW5nIHRvIHdvcmsuIEl0J3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjAwLjcwMDk1MzI0OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTgwMjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkxBTl84MDIxUVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvS2NvbmZpZy01LVxcbm5ldC84MDIxcS9LY29uZmlnOjY6Y29uZmlnIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0yMS1cXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXFxubmV0LzgwMjFxL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MDIuMzU2NzYxMTU4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDQ2ODk1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRG91YmxlLUNoZWNraW5nIGV4dDQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBqdXN0IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoYXQgYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBJdCBzb3VuZHMgYmFzaWMsIGJ1dCBJJ3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IHRoYXQgbWlzc2luZyBkZXBlbmRlbmNpZXMgY2FuIHdhc3RlIGEgaHVnZSBhbW91bnQgb2YgdGltZSwgYW5kIGNyZWF0ZSBpc3N1ZXMgdGhhdCBhcmUgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcuIFNvLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnQgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW4uIE5vIGFzc3VtcHRpb25zIGhlcmUuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZsaWN0cyB3aXRoIGFueSBvdGhlciByZWxhdGVkIHNldHRpbmdzIHRoYXQgbWlnaHQgZGlzYWJsZSBpdC4gVGhpcyBpbml0aWFsIGNoZWNrIHdpbGwgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MDguNDYxNDU0NzlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA4NjgzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MTAuMjAyMzMwNDczWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0Nzg5ODc2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQ0FOX0lTT1RQYCwgYE5FVF9BQ1RfR0FDVGAsIGBBSU9gLCBhbmQgYFZMQU5fODAyX1FgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkndmUgZ290IGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyLiBMZXQgbWUgc2VlLi4uIGBleHQ0X3Jlc2l6ZV9mc2AsIGBwaWRmZF9pb2N0bGAsIGBwcm9jX3VpZF9tYXBfd3JpdGVgLCBgaXNvdHBfc2VuZG1zZ2AsIGB0Y2ZfZ2FjdF9hY3RgLCBgc3lzX2lvX2dldGV2ZW50c2AsIGBnZXRfdW51c2VkX2ZkX2ZsYWdzYCwgYHJldXNlcG9ydF9zZWxlY3Rfc29ja2AsIGFuZCBgcmVnaXN0ZXJfdmxhbl9kZXZgLlxuXG5IbW0sIG5vdywgaG9sZCBvbi4gYHN5c19pb19nZXRldmVudHNgLi4uIHRoYXQncyBhIHN5c2NhbGwsIGlzbid0IGl0PyBTeXprYWxsZXIgcHJvYmFibHkgY2FsbHMgaXQgYGlvX2dldGV2ZW50c2AsIHJpZ2h0PyBNYXliZSBgcmVhZF9ldmVudHNgIHdvdWxkIGJlIGJldHRlcj8gT3IgcGVyaGFwcyBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgPyBUaGF0IG9uZSBpcyBzdGF0aWMuLi4gYnV0IGl0J3MgdGhlIG1vZGlmaWVkIG9uZS4gWWVhaCwgbm8sIGxldCdzIHN0aWNrIHdpdGggYHN5c19pb19nZXRldmVudHNgLiBJdCdzIHRoZSBlbnRyeSBwb2ludCwgc28gdGhhdCdzIHRoZSBjbGVhcmVzdCB0byB1c2UuXG5cbkhhbmcgb24gYSBzZWNvbmQsIHRoYXQgYHBpZGZkX2lvY3RsYCBpcyBhbHNvIHN0YXRpYy4gSSBzaG91bGQgc2VlIGlmIHRoZXJlIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBmb3IgcGlkZmQsIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IHRoZSBiZXN0IHBvc3NpYmxlIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDUyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MjoxNy42ODEzMjA0NTRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDIyMzY1NzE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhbYS16MC05X10rICkqcGlkZmRfb3BlblxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MjoyNy43MDM2OTMxNjlaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0MDcxMjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBzeXNfcGlkZmRfb3BlbmAgU3lzdGVtIENhbGwqKlxuXG5Pa2F5LCBgc3lzX3BpZGZkX29wZW5gLi4uIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgdGhlIHN0YW5kYXJkIHdheXMgdG8gaW50ZXJhY3Qgd2l0aCBwcm9jZXNzZXMg4oCTIGBmb3JrYCwgYGV4ZWN2ZWAsIHNpZ25hbHMsIG1vbml0b3JpbmcgdmlhIHByb2Nlc3MgSUQuIEJ1dCBgcGlkZmRfb3BlbmA/IFRoaXMgc3VnZ2VzdHMgYSBuZXcsIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaCB0byBwcm9jZXNzIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvICpmaWxlIGRlc2NyaXB0b3JzKi4gVGhlIFwiZmRcIiBpbiB0aGUgbmFtZSBpcyB0aGUga2V5LiBJdCdzIG5vdCBqdXN0IGEgUElELCBpdOKAmXMgYSAqZGVzY3JpcHRvciogb2YgdGhlIHByb2Nlc3MgaXRzZWxmLCBtYW5hZ2VkIHRocm91Z2ggdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtLCBsaWtlIGV2ZXJ5dGhpbmcgZWxzZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBoYXMgdG8gb2ZmZXIgc29tZXRoaW5nIGJleW9uZCB0aGUgZXhpc3RpbmcgUElELWJhc2VkIG1lY2hhbmlzbXMuIFdoeSBpbnRyb2R1Y2UgYSBuZXcgc3lzY2FsbCBpZiB0aGVyZSB3YXNuJ3QgYSBzaWduaWZpY2FudCBhZHZhbnRhZ2U/IENvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gc2VjdXJpdHksIG5hbWVzcGFjZSBpc29sYXRpb24sIHBlcmhhcHMgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcsIG9yIGJldHRlciBpbnRlZ3JhdGlvbiB3aXRoIGNhcGFiaWxpdGllcz8gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zOiBJcyBpdCBQT1NJWC1jb21wbGlhbnQ/IERvZXMgaXQgYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYXNzb2NpYXRlZCB3aXRoIFBJRCByZXVzZT8gRG9lcyBpdCBwcm92aWRlIGZpbmVyLWdyYWluZWQgY29udHJvbCBvdmVyIHByb2Nlc3Mgb3BlcmF0aW9ucyB0aGFuIHNpZ25hbHMgb3IgYHB0cmFjZWA/IFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgaHVnZSBpZiB0aGlzIGlzIHRoZSBjYXNlLCBhbmQgb3BlbnMgdXAgdGhlIHBvdGVudGlhbCBmb3IgaW1wcm92ZWQgcHJvY2VzcyBtb25pdG9yaW5nLCBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24sIGFuZCBzeXN0ZW0tbGV2ZWwgdG9vbHMuIFRoaXMgaXMgc29tZXRoaW5nIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6MzIuNjQ0NDA3OTg3WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY1MDE3NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KFthLXowLTlfXSsgKSpzeXNfcGlkZmRfb3BlblxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD05MTA9YXNtbGlua2FnZSBsb25nIHN5c19zZXRucyhpbnQgZmQsIGludCBuc3R5cGUpO1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDo5MTE6YXNtbGlua2FnZSBsb25nIHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtOTEyLWFzbWxpbmthZ2UgbG9uZyBzeXNfc2VuZG1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1zZyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oLTE2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oOjE3OnN0YXRpYyBpbmxpbmUgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90YXNrX2xvY2FsX3N0b3JhZ2VfaGVscGVycy5oLTE4LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkLmg9MjI5PXN0YXRpYyBpbmxpbmUgaW50IHdhaXRfZm9yX3BpZChwaWRfdCBwaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oLTI1My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oOjI1NDpzdGF0aWMgaW5saW5lIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZC5oLTI1NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjQyLjQwOTQzNDcwMloiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU4MTAyNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBwaW4gZG93biB0aGUga2V5IHN5c3RlbSBjYWxsIG9yIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYHBpZGZkX2luZm9gLiBJIGtub3cgYHN5c19waWRmZF9vcGVuYCBpcyB0aGUgc3lzY2FsbCB0aGF0IGdldHMgdGhpbmdzIHN0YXJ0ZWQsIGJ1dCBgcGlkZmRfaW5mb2AgaXRzZWxmIHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgcGlkZmRfaW9jdGxgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGEgc3BlY2lmaWMgYHN5c19waWRmZF9pb2N0bGAgc3lzY2FsbD8gTm8sIGl0J3MganVzdCBhIHN0YW5kYXJkIGBpb2N0bGAgb24gdGhlIHBpZGZkLiBUaGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBpcyB0aGUgZ2VuZXJpYyBgc3lzX2lvY3RsYCwgd2hpY2ggaXMgd2F5IHRvbyBicm9hZCB0byBiZSB0cnVseSB1c2VmdWwuXG5cbkhvd2V2ZXIsIGBwaWRmZF9pb2N0bGAgaXMgKnN0YXRpYyouIEhtbS4gVXN1YWxseSwgdGhhdCB3b3VsZCBiZSBhIHByb2JsZW0gZm9yIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciwgYnV0IGl0IGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLiBIb25lc3RseSwgaXQgbWlnaHQgZXZlbiBiZSB0aGUgcGVyZmVjdCBmb2N1cyBzeW1ib2wgaW4gdGhpcyBjYXNlLCBhIHRpZ2h0IGFuZCByZWxldmFudCBvbmUuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIGBwaWRmZF9pb2N0bGAgKmlzKiBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBJIGNhbiBiZSBzdXJlIGlmIEkndmUgaGl0IHRoZSBzd2VldCBzcG90LiBMZXQncyBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6NDguMjY3NTM5NjEyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxODY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaWRmZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9waWRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3BpZGZzLmM9NDk3PXN0YXRpYyBib29sIHBpZGZzX2lvY3RsX3ZhbGlkKHVuc2lnbmVkIGludCBjbWQpXFxuLS1cXG5mcy9waWRmcy5jLTUyNy1cXG5mcy9waWRmcy5jOjUyODpzdGF0aWMgbG9uZyBwaWRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvcGlkZnMuYy01Mjkte1xcbi0tXFxuZnMvcGlkZnMuYz02ODE9c3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcGlkZnMuYy02ODYtXFxuZnMvcGlkZnMuYzo2ODc6XFx0cmV0dXJuIHBpZGZkX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcXG5mcy9waWRmcy5jLTY4OC19XFxuLS1cXG5mcy9waWRmcy5jPTcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaWRmc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9waWRmcy5jLTcxNi0jZW5kaWZcXG5mcy9waWRmcy5jOjcxNzpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IHBpZGZkX2lvY3RsLFxcbmZzL3BpZGZzLmMtNzE4LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjQ4LjMxNDM2NDEwOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODYxODQ4MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMqKlxuXG5SaWdodCwgc28gd2UndmUgZ290IHNvbWV0aGluZyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzICpub3QqIGdvaW5nIHRvIGJlIGlubGluZWQuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gSW4gdGhlIGNvbnRleHQgb2YgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgYW55dGhpbmcgdGhhdCdzIG5vdCBpbmxpbmVkIGlzIGEgcmVkIGZsYWcsIGFzIGl0IGNyZWF0ZXMgYW4gaW50ZXJlc3RpbmcgY2FsbC1jaGFpbiB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZC4gYHBpZGZkX2lvY3RsYCBqdW1wcyBvdXQgYXMgYSBwcmV0dHkgY29tcGVsbGluZyBmb2N1cyBwb2ludCBnaXZlbiB0aGUgY29udGV4dC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdGFrZSBhIGRlZXBlciBkaXZlIGhlcmUuXG5cbkxldCdzIHNlZS4uLiBuZXh0IEkgc2hvdWxkIGNoZWNrIG91dCBgcHJvY191aWRfbWFwX3dyaXRlYC4gR29vZCwgaXQncyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gaXQncyBkaXJlY3RseSByZWFjaGFibGUuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGluaXRpYWwgZXhwbG9yYXRpb24sIGxldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5UaGVuIHdlJ3ZlIGdvdCBgaXNvdHBfc2VuZG1zZ2AuIEFoLCBpdCdzIHN0YXRpYywgd2hpY2ggKmNvdWxkKiByZWR1Y2UgaXRzIGFjY2Vzc2liaWxpdHksIGJ1dCB0aGUgZmFjdCB0aGF0IGl0J3MgYmVpbmcgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpcyBpbnRyaWd1aW5nLiBFdmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIHN0YXRpYywgdGhlIGNhbGwtY2hhaW4gdGhhdCBjYW4gcGFzcyBpdCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaGFzIHRvIGJlIHNjcnV0aW5pemVkLCBhcyBpdCBjb3VsZCBiZSByZWFjaGVkIGZyb20gc29tZXdoZXJlIHdlJ3JlIG5vdCBleHBlY3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDI6NTQuMTc2MjE0ODY5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwMTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc290cF9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vaXNvdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2lzb3RwLmM9MTA4OD1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTExMDMtXFxubmV0L2Nhbi9pc290cC5jOjExMDQ6c3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2Nhbi9pc290cC5jLTExMDUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jPTIwMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTIwMjAtXFx0LmdldHNvY2tvcHQgPSBpc290cF9nZXRzb2Nrb3B0LFxcbm5ldC9jYW4vaXNvdHAuYzoyMDIxOlxcdC5zZW5kbXNnID0gaXNvdHBfc2VuZG1zZyxcXG5uZXQvY2FuL2lzb3RwLmMtMjAyMi1cXHQucmVjdm1zZyA9IGlzb3RwX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQyOjU0LjIyMjkxOTgxNVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU1MTU2Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgS2VybmVsIFN5bWJvbCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBpc290cF9zZW5kbXNnYCBpcyBsb29raW5nIGdvb2Qg4oCTIG5vIGltbWVkaWF0ZSBjb25jZXJucyB0aGVyZS4gTm93LCBsZXTigJlzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIG90aGVyIGNhbmRpZGF0ZXMgSSd2ZSBiZWVuIGNvbnNpZGVyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC5cblxuYHRjZl9nYWN0X2FjdGAgLSBSaWdodCwgYFRDX0lORElSRUNUX1NDT1BFYCBvbiB0aGF0IG9uZSwgbWVhbmluZyBpdCdzIG5vbi1zdGF0aWMsIGFsbCBnb29kLiBUaGVuLCBgc3lzX2lvX2dldGV2ZW50c2AsIHllcCwgdGhhdCdzIGEgc3lzY2FsbCwgc28gd2UncmUgc2V0IHRoZXJlIGFzIHdlbGwuIE1vdmluZyBvbiwgYGdldF91bnVzZWRfZmRfZmxhZ3NgIOKAkyBhbHNvIG5vbi1zdGF0aWMuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGV4cG9ydGVkLCBhbmQgYHJlZ2lzdGVyX3ZsYW5fZGV2YCB0b28uXG5cbkFscmlnaHQsIHRoYXQgY29uZmlybXMgdGhlIGZvbGxvd2luZyBhcyB0aGUgY29yZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbjpcbi0gICBgZXh0NF9yZXNpemVfZnNgXG4tICAgYHBpZGZkX2lvY3RsYFxuLSAgIGBwcm9jX3VpZF9tYXBfd3JpdGVgXG4tICAgYGlzb3RwX3NlbmRtc2dgXG4tICAgYHRjZl9nYWN0X2FjdGBcbi0gICBgc3lzX2lvX2dldGV2ZW50c2Bcbi0gICBgZ2V0X3VudXNlZF9mZF9mbGFnc2Bcbi0gICBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYFxuLSAgIGByZWdpc3Rlcl92bGFuX2RldmBcblxuQW5kIGluIHRlcm1zIG9mIHJlbGV2YW50IGNvbmZpZ3MsIEknbSBub3Rpbmc6XG4tICAgYEVYVDRfRlNgXG4tICAgYFVTRVJfTlNgXG4tICAgYENBTl9JU09UUGBcbi0gICBgTkVUX0FDVF9HQUNUYFxuLSAgIGBBSU9gXG4tICAgYFZMQU5fODAyMVFgXG5cbldhaXQsIGhhbmcgb24uIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IEkgc2F3IGBzdXBlcl9jYWNoZV9jb3VudGAgaW4gYGZzL3N1cGVyLmNgLiBUaGF0J3MgYSBiaXQgb2YgYSB3cmlua2xlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaW5ncyB0aGF0IGFyZSBzdGF0aWMuIElzIHRoZXJlIGEgYmV0dGVyIGZvY3VzIHN5bWJvbCByZWxhdGVkIHRvIHRoYXQ/IE1heWJlIGBtb3VudF9mc2Agb3IgYHZmc19nZXRfdHJlZWAuLi4gYnV0IGhhbmcgb24sIGBzdXBlcl9jYWNoZV9jb3VudGAgaXMgZmluZSBhY3R1YWxseS4gSSByZWNhbGwgaXQncyBzdGF0aWMsIGJ1dCBJIHRoaW5rIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY2FsbCBzaXRlcywgYnV0IEknbSB0aGlua2luZyB3ZSdyZSBvayBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEzMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzowMS44NzgwODAwNTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjI0OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1cGVyX2NhY2hlX2NvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz0xOTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbmZzL3N1cGVyLmMtMjUwLVxcbmZzL3N1cGVyLmM6MjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbmZzL3N1cGVyLmMtMjUyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxuZnMvc3VwZXIuYy0yNjMtXFx0ICogbGlzdF9scnVfc2hyaW5rX2NvdW50KCkgb3Igc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoKS4gQ291bnRzIGNhblxcbmZzL3N1cGVyLmM6MjY0OlxcdCAqIGNoYW5nZSBiZXR3ZWVuIHN1cGVyX2NhY2hlX2NvdW50IGFuZCBzdXBlcl9jYWNoZV9zY2FuLCBzbyB3ZSByZWFsbHlcXG5mcy9zdXBlci5jLTI2NS1cXHQgKiBkb24ndCBuZWVkIGxvY2tzIGhlcmUuXFxuLS1cXG5mcy9zdXBlci5jPTMzNj1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxcbi0tXFxuZnMvc3VwZXIuYy00MDUtXFx0cy1cXHUwMDNlc19zaHJpbmstXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHN1cGVyX2NhY2hlX3NjYW47XFxuZnMvc3VwZXIuYzo0MDY6XFx0cy1cXHUwMDNlc19zaHJpbmstXFx1MDAzZWNvdW50X29iamVjdHMgPSBzdXBlcl9jYWNoZV9jb3VudDtcXG5mcy9zdXBlci5jLTQwNy1cXHRzLVxcdTAwM2VzX3Nocmluay1cXHUwMDNlYmF0Y2ggPSAxMDI0O1xcbi0tXFxuZnMvc3VwZXIuYz0xOTM1PWludCB2ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvc3VwZXIuYy0xOTYzLVxcdCAqIHN1cGVyX3dha2UoKSBjb250YWlucyBhIG1lbW9yeSBiYXJyaWVyIHdoaWNoIGFsc28gY2FyZSBvZlxcbmZzL3N1cGVyLmM6MTk2NDpcXHQgKiBvcmRlcmluZyBmb3Igc3VwZXJfY2FjaGVfY291bnQoKS4gV2UgcGxhY2UgaXQgYmVmb3JlIHNldHRpbmdcXG5mcy9zdXBlci5jLTE5NjUtXFx0ICogU0JfQk9STiBhcyB0aGUgZGF0YSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHR3byBmdW5jdGlvbnMgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MDEuOTIzMzA5NzUxWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTUyODA4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBUYXJnZXQgRnVuY3Rpb24gTGlzdCoqXG5cbk9rYXksIHNvIGBzdXBlcl9jYWNoZV9jb3VudGAgc2VlbXMgZmluZSwgYnV0IGdldHRpbmcgYXQgc2hyaW5rZXJzIGRpcmVjdGx5IGlzIHByb3ZpbmcgZGlmZmljdWx0LiBJIHRoaW5rIGB2ZnNfZ2V0X3RyZWVgIGlzIGEgYmV0dGVyIGVudHJ5IHBvaW50LCBlc3BlY2lhbGx5IHNpbmNlIGl0IHJlbGF0ZXMgdG8gbW91bnQgcGF0aHMgZGlyZWN0bHkuIExldCdzIGFkZCB0aGF0LlxuXG5Ib2xkIG9uLCBgZ2V0X3VudXNlZF9mZF9mbGFnc2AgaXMgY2FsbGVkIGR1cmluZyBmaWxlIG9wZW5pbmcsIHNvIGl0J3MgYSBzdXBlciBob3QgcGF0aCEgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gUmVtb3ZlIGl0LlxuXG5Ob3csIGxldCdzIHRoaW5rLiBgc3lzX2lvX2dldGV2ZW50c2A/IEl0J3MgYSBzcGVjaWZpYyBzeXNjYWxsLCBub3QgYSBnZW5lcmljIGhvdCBwYXRoLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5LiBgcGlkZmRfaW9jdGxgPyBTcGVjaWZpYyB0byBwaWRmZC4gR29vZC4gYHByb2NfdWlkX21hcF93cml0ZWA/IFVzZXIgbmFtZXNwYWNlIHNwZWNpZmljLiBGaW5lLiBIb3cgYWJvdXQgYGlzb3RwX3NlbmRtc2dgPyBTcGVjaWZpYyB0byBDQU4gSVNPVFAuIFllcC4gYHRjZl9nYWN0X2FjdGA/IFRDIEdBQ1Qgc3BlY2lmaWMuIE9rYXkuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgPyBTcGVjaWZpYyB0byBTT19SRVVTRVBPUlQsIGl0J3MgZmluZS4gYHJlZ2lzdGVyX3ZsYW5fZGV2YD8gVkxBTiBzcGVjaWZpYy4gWXVwLiBGaW5hbGx5LCBgZXh0NF9yZXNpemVfZnNgPyBFeHQ0IHJlc2l6ZSwgcGVyZmVjdC5cblxuU28gdGhlIHJlZmluZWQgbGlzdCBpczpcblxuKiAgIGBleHQ0X3Jlc2l6ZV9mc2BcbiogICBgcGlkZmRfaW9jdGxgXG4qICAgYHByb2NfdWlkX21hcF93cml0ZWBcbiogICBgaXNvdHBfc2VuZG1zZ2BcbiogICBgdGNmX2dhY3RfYWN0YFxuKiAgIGBzeXNfaW9fZ2V0ZXZlbnRzYFxuKiAgIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgXG4qICAgYHJlZ2lzdGVyX3ZsYW5fZGV2YFxuKiAgIGB2ZnNfZ2V0X3RyZWVgXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBgdmZzX2dldF90cmVlYC4gSXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGZpbGVzeXN0ZW1zLCB3aGljaCBpcyBpbmZyZXF1ZW50LCBzbyBpdCdzIG5vdCBhIHN1cGVyIGhvdCBwYXRoLiBHb29kLlxuXG5Pa2F5LCBsZXQncyByZS1ldmFsdWF0ZSB0aGUgb3RoZXIgcG90ZW50aWFsIGNhbmRpZGF0ZXMuIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgIGlzIGNhbGxlZCBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbiB3aXRoIFNPX1JFVVNFUE9SVCwgc28gaXQncyBvbmx5IGEgaG90IHBhdGggd2l0aCB0aGF0IHNvY2tldCBvcHRpb24gY29uZmlndXJlZCwgYnV0IHN0aWxsIHNwZWNpZmljIGVub3VnaC4gYHRjZl9nYWN0X2FjdGAgaXMgZm9yIHBhY2tldCBwcm9jZXNzaW5nIHdoZW4gR0FDVCBpcyBjb25maWd1cmVkLCBzcGVjaWZpYy4gYHN5c19pb19nZXRldmVudHNgIGlzIGEgc3lzdGVtIGNhbGwsIG5vdCBnZW5lcmljLiBgcGlkZmRfaW9jdGxgIGlzIHNwZWNpZmljYWxseSBmb3IgcGlkZmQuIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGlzIGZvciB1c2VyIG5hbWVzcGFjZS4gYGlzb3RwX3NlbmRtc2dgIGlzIGZvciBDQU4gSVNPVFAuIGByZWdpc3Rlcl92bGFuX2RldmAgaXMgZm9yIFZMQU4sIGFuZCBgZXh0NF9yZXNpemVfZnNgIGlzIGZvciB0aGUgZXh0NCByZXNpemUuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEkgdGhpbmsgSSBuZWVkOiBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX1VTRVJfTlNgLCBgQ09ORklHX0NBTl9JU09UUGAsIGBDT05GSUdfTkVUX0FDVF9HQUNUYCwgYENPTkZJR19BSU9gLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC5cblxuT2gsIEkgZm9yZ290LiBgQ09ORklHX0NBTl9JU09UUGAgaGFzIGEgcGFyZW50IGNvbmZpZzogYENPTkZJR19DQU5gLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmV0L2Nhbi9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjEzLjQ3NjEyMDMwNFoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMTg2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcXFwibmV0L2Nhbi9qMTkzOS9LY29uZmlnXFxcIlxcbm5ldC9jYW4vS2NvbmZpZy01OC1cXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxcbm5ldC9jYW4vS2NvbmZpZy02MC1cXHR0cmlzdGF0ZSBcXFwiSVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MTMuNTIxMjQ1MzQxWiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTAxMTQ0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBDQU5fSVNPVFAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENBTl9JU09UUGAuIE15IGdvLXRvIGlzIHVzdWFsbHkgdGhlIGBLY29uZmlnYCBmaWxlcywgc28gbGV0J3MgbmF2aWdhdGUgdG8gYG5ldC9jYW4vS2NvbmZpZ2AuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYENBTl9JU09UUGAgaXMgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uLiBJIGV4cGVjdCBJJ2xsIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvbywgYW5kIHBvc3NpYmx5IHNvbWUgYGRlZmF1bHRgIHZhbHVlcyBvciBgaGVscGAgdGV4dCB0aGF0IGdpdmUgbWUgY29udGV4dC4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYENBTl9JU09UUGAgaXMgc2VsZWN0ZWQsIGFuZCBjb252ZXJzZWx5LCB3aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgSSAqZG9uJ3QqIHdhbnQgaXQuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSwgYW5kIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYnVpbGQgZXJyb3JzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MTcuOTMxMzYyOTA3WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxMTE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0lTT1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzoxNy45NzcyNzk3NzRaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMjYxMTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ0FOX0lTT1RQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucyBhYm91dCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWNzIHJlbGF0ZWQgdG8gYGNvbmZpZyBDQU5fSVNPVFBgLiBUaGlzIGxpbmUgaXMgY3J1Y2lhbCwgYW5kIGl0J3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGUgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBjb25maWd1cmVkLCB3aGF0IGZvbGxvd3MgdGhpcyBsaW5lLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIHRoZSBJU08tVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHNvIGxvb2tpbmcgZGVlcGVyIGF0IHdoYXQgaXMgZGVmaW5lZCBpcyBlc3NlbnRpYWwuIEl0IGNvdWxkIGludm9sdmUgcGFyYW1ldGVycyBmb3IgYWRkcmVzc2luZywgZmxvdyBjb250cm9sLCBmcmFnbWVudGF0aW9uLCBvciBlcnJvciBoYW5kbGluZy4gV2l0aG91dCB0aGF0IGNvbnRleHQsIGFueSBicm9hZGVyIGludGVycHJldGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHdvdWxkIGJlIHByZW1hdHVyZSBhbmQgcG90ZW50aWFsbHkgbWlzbGVhZGluZy4gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gZm9ybSBhIHJlbGlhYmxlIG9waW5pb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjg5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MjIuNDc5ODk1Mzc0WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM2MjE3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUCguKlxcXFxuKXsxLDV9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MjIuNTI5MjY1MTRaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3OTMzOTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ0FOIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCdzIENBTiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIFRoZSBgbmV0L2Nhbi9LY29uZmlnYCBmaWxlIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHdoZXJlIHRoZSBjb3JlIENBTiBmdW5jdGlvbmFsaXRpZXMgYXJlIGRlZmluZWQsIGFuZCBsaWtlbHkgaG9sZHMgdGhlIGtleSB0byB0aGUgb3B0aW9ucyBJIG5lZWQgdG8gZXhhbWluZS4gVXNpbmcgYHJlYWQtZmlsZWAgb24gdGhhdCBzcGVjaWZpYyBLY29uZmlnIGZpbGUgaXMgdGhlIG1vc3QgZWZmaWNpZW50IGZpcnN0IHN0ZXAgdG8gZ2V0IGFuIG92ZXJ2aWV3LiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCBhcmUgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIG9mZmVyIG1lIGEgc3RyYWlnaHRmb3J3YXJkIG91dGxpbmUgb2YgdGhlIGhpZ2gtbGV2ZWwgQ0FOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGVzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6MjYuOTA4NjA2OTM5WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NTpcXHRcXHQgIGJ5IHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGtub3duIGUuZy4gZnJvbSBpcHRhYmxlcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBDQU5fSVNPVFBcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBDQU4gVHJhbnNwb3J0IFByb3RvY29scyBvZmZlciBzdXBwb3J0IGZvciBzZWdtZW50ZWQgUG9pbnQtdG8tUG9pbnRcXG4gIDYzOlxcdFxcdCAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIENBTiBub2RlcyB2aWEgdHdvIGRlZmluZWQgQ0FOIElkZW50aWZpZXJzLlxcbiAgNjQ6XFx0XFx0ICBUaGlzIHByb3RvY29sIGRyaXZlciBpbXBsZW1lbnRzIHNlZ21lbnRlZCBkYXRhIHRyYW5zZmVycyBmb3IgQ0FOIENDXFxuICA2NTpcXHRcXHQgIChha2EgQ2xhc3NpY2FsIENBTiwgQ0FOIDIuMEIpIGFuZCBDQU4gRkQgZnJhbWUgdHlwZXMgd2hpY2ggd2VyZVxcbiAgNjY6XFx0XFx0ICBpbnRyb2R1Y2VkIHdpdGggSVNPIDE1NzY1LTI6MjAxNi5cXG4gIDY3OlxcdFxcdCAgQXMgQ0FOIGZyYW1lcyBjYW4gb25seSB0cmFuc3BvcnQgYSBzbWFsbCBhbW91bnQgb2YgZGF0YSBieXRlc1xcbiAgNjg6XFx0XFx0ICAobWF4LiA4IGJ5dGVzIGZvciBDQU4gQ0MgYW5kIG1heC4gNjQgYnl0ZXMgZm9yIENBTiBGRCkgdGhpc1xcbiAgNjk6XFx0XFx0ICBzZWdtZW50YXRpb24gaXMgbmVlZGVkIHRvIHRyYW5zcG9ydCBsb25nZXIgUHJvdG9jb2wgRGF0YSBVbml0cyAoUERVKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzoyNi45MDg2NjMyNzlaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1OTEwNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDQU5fSVNPVFAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ0FOX0lTT1RQYCBhbmQgSSBzZWUgaXQncyBuZXN0ZWQgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGhpbiB0aGUgYENBTmAgbWVudS4gSXQgZG9lc24ndCBhcHBlYXIgdG8gaGF2ZSBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGJleW9uZCB0aGF0LiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgYENBTmAgbWVudSBpdHNlbGYgaXMgbmVjZXNzYXJ5LiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgYENBTmAgaW5mcmFzdHJ1Y3R1cmUgaXMsIGluIGZhY3QsIG5lZWRlZCBiZWZvcmUgYXNzdW1pbmcgYENBTl9JU09UUGAgaXMgcmVsZXZhbnQuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIGNsYXJpZnkgaXRzIHJvbGUgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzozNS4zNjc3NzMwMDlaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzY4Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWctNS1cXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxcbm5ldC9jYW4vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0MzozNS40MTQ1NDcyODVaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyOTQ0NjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZSBuZWVkIGZvciBgQ0FOYCBjbGVhcmx5LiBOb3csIGJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIGxldCdzIHRha2UgYSBtZXRob2RpY2FsIGFwcHJvYWNoLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0dBQ1RgLiBVbmRlcnN0YW5kaW5nIHdoYXQgYE5FVF9BQ1RfR0FDVGAgcmVsaWVzIHVwb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgbGFuZHNjYXBlIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBgQ0FOYC4gVGhpcyB3aWxsIGhlbHAgbWUgYXZvaWQgYW55IHVuZm9yZXNlZW4gY29uZmxpY3RzIG9yIHJlZHVuZGFudCBlZmZvcnRzIGRvd24gdGhlIGxpbmUuIEl04oCZcyBhYm91dCBiZWluZyBlZmZpY2llbnQgYW5kIGtub3dpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBvciBqdW1waW5nIHRvIGNvbmNsdXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjQwLjQ0Mzk5ODYwN1oiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcbiA3MjY6XFx0Y29uZmlnIE5FVF9BQ1RfR0FDVFxcbiA3Mjc6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgYWN0aW9uc1xcXCJcXG4gNzI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzI5OlxcdFxcdGhlbHBcXG4gNzMwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byB0YWtlIGdlbmVyaWMgYWN0aW9ucyBzdWNoIGFzIGRyb3BwaW5nIGFuZFxcbiA3MzE6XFx0XFx0ICBhY2NlcHRpbmcgcGFja2V0cy5cXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDczNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfZ2FjdC5cXG4gNzM1OlxcdFxcbiA3MzY6XFx0Y29uZmlnIEdBQ1RfUFJPQlxcbiA3Mzc6XFx0XFx0Ym9vbCBcXFwiUHJvYmFiaWxpdHkgc3VwcG9ydFxcXCJcXG4gNzM4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0FDVF9HQUNUXFxuIDczOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjQwLjQ0NDE2MTc1NloiLCJTZXEiOjgxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjYzMzUyMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgTkVUX0NMU19BQ1RgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgSSBhbHNvIHNlZSBgR0FDVF9QUk9CYCBpcyBtb2RpZmllZCBpbiB0aGUgY29kZSwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IGludm9sdmVkLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHBhdGNoIHRvIG1ha2Ugc3VyZS5cblxuQWgsIHllcywgbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbnN0YXRpYyBpbnQgZ2FjdF9uZXRfcmFuZChzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpXG5gYGBcblxuVGhlIGAjaWZkZWYgQ09ORklHX0dBQ1RfUFJPQmAgY29uZmlybXMgbXkgaW5pdGlhbCBvYnNlcnZhdGlvbi4gYEdBQ1RfUFJPQmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LiBOb3csIHRpbWUgdG8gbW92ZSBvbiBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgVkxBTl84MDIxUWAgaW4gcmVsYXRpb24gdG8gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjQ2LjcwNzUxNzMzN1oiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWTEFOXzgwMjFRXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xcbiAgMTA6XFx0XFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxcbiAgMTE6XFx0XFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXFxuICAxMjpcXHRcXHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXFxuICAxMzpcXHRcXHQgIHRoZSAnaXAnIHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxcbiAgMTQ6XFx0XFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XFxuICAxNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LmNhbmRlbGF0ZWNoLmNvbS9+Z3JlZWFyL3ZsYW4uaHRtbFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDM6NDYuNzA3NTgxNDQ3WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjAzNjg3MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY3kgQ2hlY2s6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gSSBzZWUgbm8gaW1tZWRpYXRlbHkgb2J2aW91cywgZGlyZWN0IGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZS4gR29vZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyAqYSBiaXQqLCBidXQgd2Uga25vdyBiZXR0ZXIgdGhhbiB0byBhc3N1bWUgdG9vIG11Y2ggYXQgdGhpcyBzdGFnZS5cblxuVGltZSB0byBkZWx2ZSBhIGxpdHRsZSBkZWVwZXIgYW5kIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGhpZGRlbiBpc3N1ZXMuIE15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQUlPYC4gSXQncyBhIGtleSBwaWVjZSwgYW5kIGl0cyBpbnRlcmFjdGlvbnMgYXJlIG9mdGVuIHdoZXJlIHRoaW5ncyBiZWNvbWUgc3VidGx5IGludGVyY29ubmVjdGVkIG9yIGNhdXNlIGhlYWRhY2hlcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQzOjU2LjkxMTI3MjYwOVoiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTU6XFx0XFxuMTkxNjpcXHRjb25maWcgQUlPXFxuMTkxNzpcXHRcXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5MTg6XFx0XFx0ZGVmYXVsdCB5XFxuMTkxOTpcXHRcXHRoZWxwXFxuMTkyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgUE9TSVggYXN5bmNocm9ub3VzIEkvTyB3aGljaCBtYXkgYnkgdXNlZFxcbjE5MjE6XFx0XFx0ICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmdcXG4xOTIyOlxcdFxcdCAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suXFxuMTkyMzpcXHRcXG4xOTI0OlxcdGNvbmZpZyBJT19VUklOR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0Mzo1Ni45MTE0MDE1ODlaIiwiU2VxIjo4NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2ODE1Mjc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlIC0gVVNFUl9OUyoqXG5cblJpZ2h0LCBubyBpbW1lZGlhdGUsIG9idmlvdXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFyZSBzY3JlYW1pbmcgYXQgbWUuIFRoYXQncyBnb29kLCBhIGNsZWFuIHNsYXRlIHRvIGJlZ2luIHdpdGggaXMgYWx3YXlzIHByZWZlcmFibGUuIEJ1dCBsZXQncyBub3QgZ2V0IGNvbXBsYWNlbnQuIE15IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IFwibm8gYXBwYXJlbnQgZGVwZW5kZW5jaWVzXCIgb2Z0ZW4gbWFza3Mgc29tZXRoaW5nIHN1YnRsZSwgb3Igc29tZXRoaW5nIHRoYXQncyBvbmx5IHJlbGV2YW50IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBnbyBkZWVwZXIgaW50byB0aGUgZ3V0cyBvZiB0aGUgcHJvYmxlbSwgaXMgYSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uIG9mIGFueXRoaW5nIHJlbGF0ZWQgdG8gYFVTRVJfTlNgLiBJdOKAmXMgYSBjb21tb24gYXJlYSBmb3IgaGlkZGVuIGNvbXBsZXhpdHksIGVzcGVjaWFsbHkgaW4gc3lzdGVtcyBpbnZvbHZpbmcgY29udGFpbmVyaXphdGlvbiwgc2VjdXJpdHksIG9yIHByaXZpbGVnZSBzZXBhcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZSByZWdhcmRpbmcgdXNlciBuYW1lc3BhY2VzLCBhbmQgaG93IHRob3NlIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlbGV2YW50IGNvbXBvbmVudC4gSSBuZWVkIHRvIGlkZW50aWZ5IGlmIGFuZCBob3cgdXNlciBuYW1lc3BhY2UgbWFwcGluZyBhZmZlY3RzIHBlcm1pc3Npb25zLCByZXNvdXJjZSBsaW1pdHMsIG9yIGludGVyYWN0aW9uIHdpdGgga2VybmVsIGZlYXR1cmVzLiBJ4oCZbGwgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcmVsYXRlIHRvIHRoaXMgY29tcG9uZW50LCBmb2N1c2luZyBvbiB0aGUgc2V0dGluZ3MgZm9yIGBVU0VSX05TYC4gVGhlbiwgSeKAmWxsIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGF0ZWQgc2VjdXJpdHkgYWR2aXNvcmllcyBvciBrbm93biB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgY2FyZWZ1bCBhbmFseXNpcyBzaG91bGQgdGVsbCBtZSB3aGV0aGVyIGFueSBpc3N1ZXMgYXJlIHdhaXRpbmcgdG8gbWFuaWZlc3QgdGhlbXNlbHZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjAyLjE3OTU1NjU3M1oiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTExNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDU6XFx0XFxuMTQ0NjpcXHRjb25maWcgVVNFUl9OU1xcbjE0NDc6XFx0XFx0Ym9vbCBcXFwiVXNlciBuYW1lc3BhY2VcXFwiXFxuMTQ0ODpcXHRcXHRkZWZhdWx0IG5cXG4xNDQ5OlxcdFxcdGhlbHBcXG4xNDUwOlxcdFxcdCAgVGhpcyBhbGxvd3MgY29udGFpbmVycywgaS5lLiB2c2VydmVycywgdG8gdXNlIHVzZXIgbmFtZXNwYWNlc1xcbjE0NTE6XFx0XFx0ICB0byBwcm92aWRlIGRpZmZlcmVudCB1c2VyIGluZm8gZm9yIGRpZmZlcmVudCBzZXJ2ZXJzLlxcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHQgIFdoZW4gdXNlciBuYW1lc3BhY2VzIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgaXQgaXNcXG4xNDU0OlxcdFxcdCAgcmVjb21tZW5kZWQgdGhhdCB0aGUgTUVNQ0cgb3B0aW9uIGFsc28gYmUgZW5hYmxlZCBhbmQgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDo0NDowMi4xNzk2Njg5NDNaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxNjAzMTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSDigJMgbm8gaW1tZWRpYXRlLCBleHBsaWNpdCBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIEdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIGF0IGxlYXN0IGluaXRpYWxseS4gTm93LCBnaXZlbiBteSBhcmVhIG9mIGV4cGVydGlzZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGBFWFQ0X0ZTYCBmZWF0dXJlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IG90aGVyIGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBjb21tb25seSB1c2VkIGFsb25nc2lkZSBFWFQ0LiBJdCdzIGEgZm91bmRhdGlvbmFsIHN0b3JhZ2UgdGVjaG5vbG9neSwgYW5kIEkgbmVlZCBhIHByZWNpc2UgcGljdHVyZSBvZiBpdHMgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwMTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjA3Ljk5NTcwMzYyMloiLCJTZXEiOjg4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDQ6MDcuOTk1NzY4OTgyWiIsIlNlcSI6ODksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTE4ODg5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJ3Qgc2VlbSB0byBoYXZlIGFueSBpbW1lZGlhdGUsIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiBlYWNoIG90aGVyLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgZml0IHRvZ2V0aGVyLiBTbywgbXkgY3VycmVudCBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyIGlzOiBgRVhUNF9GU2AsIGBVU0VSX05TYCwgYENBTmAsIGBDQU5fSVNPVFBgLCBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9HQUNUYCwgYEdBQ1RfUFJPQmAsIGBBSU9gLCBhbmQgYFZMQU5fODAyMVFgLiBUaGV5IGFsbCBzZWVtIHJlbGF0aXZlbHkgc2VsZi1jb250YWluZWQsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lIGNvbXBsZXRlIGluZGVwZW5kZW5jZSBhdCB0aGlzIHBvaW50LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBzb21ldGhpbmcganVzdCBwaW5nZWQgbXkgcmFkYXIuIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBDT05GSUdfQ0FOYC4gSSByZWNhbGwgdGhhdCBgQ0FOYCBpcyB0eXBpY2FsbHkgcHJlc2VudGVkIGFzIGEgbWVudSBlbnRyeSBpbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gQnV0IEkgbmVlZCB0byBkb3VibGUgY2hlY2sgaWYgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBcIkNBTlwiIGlzIGFsc28gaXRzZWxmIGEgZGlzdGluY3QgY29uZmlnIG9wdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJdCdzIGJlc3QgdG8gdmVyaWZ5IHRoaXMgbm93LCBhcyB0aGlzIGNvdWxkIGltcGFjdCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJvY2Vzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzMzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjE0LjU0NzY2MTE3NVoiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjMxMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz0yMj1pZiBDQU5cXG5uZXQvY2FuL0tjb25maWctMjMtXFxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXFxubmV0L2Nhbi9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWctMzMtXFxubmV0L2Nhbi9LY29uZmlnOjM0OmNvbmZpZyBDQU5fQkNNXFxubmV0L2Nhbi9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNhc3QgTWFuYWdlciBDQU4gUHJvdG9jb2wgKHdpdGggY29udGVudCBmaWx0ZXJpbmcpXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTQ1LVxcbm5ldC9jYW4vS2NvbmZpZzo0Njpjb25maWcgQ0FOX0dXXFxubmV0L2Nhbi9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJDQU4gR2F0ZXdheS9Sb3V0ZXIgKHdpdGggbmV0bGluayBjb25maWd1cmF0aW9uKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG5uZXQvY2FuL0tjb25maWctNTgtXFxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcXG5uZXQvY2FuL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIklTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjE0LjU5MzM5MTI4MVoiLCJTZXEiOjkxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTg0MTA3NDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1lbnVjb25maWcgQ0FOYCBlbnRyeS4gVGhhdCBtZWFucyBgQ0FOYCBpcyB0aGUgY29uZmlndXJhdGlvbiBuYW1lIEknbSBpbnRlcmVzdGVkIGluLiBMZXQncyBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZvY3VzIHN5bWJvbHMgSSBuZWVkIHRvIGRlZmluZS4gSSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgZXh0NF9yZXNpemVfZnNgLCBgcGlkZmRfaW9jdGxgLCBgcHJvY191aWRfbWFwX3dyaXRlYCwgYGlzb3RwX3NlbmRtc2dgLCBgdGNmX2dhY3RfYWN0YCwgYHN5c19pb19nZXRldmVudHNgLCBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCwgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYW5kIGB2ZnNfZ2V0X3RyZWVgLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBgc3lzX2lvX2dldGV2ZW50c2AuIEkga25vdyBTeXprYWxsZXIgdXNlcyBgaW9fZ2V0ZXZlbnRzYCwgYnV0IHRoZSBrZXJuZWwgc3ltYm9sIGlzIGBzeXNfaW9fZ2V0ZXZlbnRzYC4gQWN0dWFsbHksIG9uIHg4NiwgaXQgbWlnaHQgYmUgYF9feDY0X3N5c19pb19nZXRldmVudHNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgYHN5c19pb19nZXRldmVudHNgIGlzIHRoZSBtb3N0IGRpcmVjdC4gU2hvdWxkIEkgdXNlIGBzeXNfaW9fZ2V0ZXZlbnRzYCBvciBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgPyAgTGV0J3Mgc3RpY2sgd2l0aCBgc3lzX2lvX2dldGV2ZW50c2AgLSBTeXprYWxsZXIgY2FuIGhhbmRsZSB0aGUgbWF0Y2ggdG8gdGhlIHN5c2NhbGwuIEFjdHVhbGx5LCBJIHdhcyBtb2RpZnlpbmcgYSBzdGF0aWMgZnVuY3Rpb24gYGFpb19yZWFkX2V2ZW50c19yaW5nYCBpbiB0aGVyZSBhcyB3ZWxsLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQ0FOYCwgYENBTl9JU09UUGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0dBQ1RgLCBgR0FDVF9QUk9CYCwgYEFJT2AsIGFuZCBgVkxBTl84MDIxUWAuIEFueXRoaW5nIGVsc2UgdG8gY29uc2lkZXI/XG5cbkknbSBhbHNvIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB0byBgZnMvZmlsZS5jYCB3aXRoaW4gYGV4cGFuZF9mZHRhYmxlYCwgYGV4cGFuZF9maWxlc2AsIGFuZCBgZmRfaW5zdGFsbGAsIHdoaWNoIGFyZSBoZWF2aWx5IHVzZWQgaW4gYG9wZW5gLCBgc29ja2V0YCwgYW5kIGBwaXBlYC4gSSBjb3VsZCBhZGQgYSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGVzZSBhcmUgc28gZnVuZGFtZW50YWwgdGhhdCB0aGV5J3JlIGFsbW9zdCBhbHdheXMgaGl0IGFueXdheS4gSSBjb25zaWRlcmVkIGBhbGxvY19mZGAgb3IgYGdldF91bnVzZWRfZmRfZmxhZ3NgLCBidXQgSSdtIGdvaW5nIHRvIG9taXQgdGhlbSBzaW5jZSB0aGV5J3JlIHN1Y2ggY29tbW9uIGZ1bmN0aW9ucy5cblxuVGhlIG1vZGlmaWNhdGlvbnMgaW4gYGZzL3BpZGZzLmNgIGFyZSBhcm91bmQgYHBpZGZkX2luZm9gLCBzbyBgcGlkZmRfaW9jdGxgIGlzIGEgZ29vZCBmb2N1cy5cblxuYGZzL3N1cGVyLmNgIG1vZGlmaWNhdGlvbnMgaW52b2x2ZSBgc3VwZXJfY2FjaGVfY291bnRgLCBhbmQgYHZmc19nZXRfdHJlZWAgaXMgdGhlIHJpZ2h0IGZvY3VzLlxuXG5Gb3IgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgSSd2ZSBnb3QgYG1hcF9pZF9yYW5nZV9kb3duYCwgYG1hcF9pZF9yYW5nZV91cGAsIGBtX3N0YXJ0YCwgYW5kIGBtYXBfd3JpdGVgIGNoYW5nZXMuIGBwcm9jX3VpZF9tYXBfd3JpdGVgIGNhcHR1cmVzIHRoZSByZWxldmFudCBwYXJ0LlxuXG5UaGUgYGxpYi92c3ByaW50Zi5jYCBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBgZmlsbF9wdHJfa2V5YCBhbmQgYF9fcHRyX3RvX2hhc2h2YWxgIChmb3IgYCVwYCBmb3JtYXR0aW5nKSDigJMgbm90IGEgaGlnaCBwcmlvcml0eSBmb3IgYSBmb2N1cyBzeW1ib2wuXG5cbmBuZXQvODAyMXEvdmxhbi5jYCB1cGRhdGVzIGluY2x1ZGUgYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCwgc28gYHJlZ2lzdGVyX3ZsYW5fZGV2YCBpcyB0aGUgZm9jdXMuXG5cbkluIGBuZXQvY2FuL2lzb3RwLmNgLCBgaXNvdHBfc2VuZG1zZ2AgaXMgcGVyZmVjdC5cblxuTGFzdGx5LCBgbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY2AgY2hhbmdlcyBpbnZvbHZlIGBfX3JldXNlcG9ydF9hZGRfc29ja2AsIGBfX3JldXNlcG9ydF9kZXRhY2hfc29ja2AsIGByZXVzZXBvcnRfc2VsZWN0X3NvY2tgLCBhbmQgYHJldXNlcG9ydF9taWdyYXRlX3NvY2tgLiBJJ2xsIHVzZSBgcmV1c2Vwb3J0X3NlbGVjdF9zb2NrYCBhcyB0aGUgcmVwcmVzZW50YXRpdmUuXG5cbmBuZXQvc2NoZWQvYWN0X2dhY3QuY2AgY29udGFpbnMgYGdhY3RfbmV0X3JhbmRgLCBgZ2FjdF9kZXRlcm1gLCBgdGNmX2dhY3RfaW5pdGAsIGFuZCBgdGNmX2dhY3RfYWN0YCwgc28gYHRjZl9nYWN0X2FjdGAgaXMgdGhlIGFwcHJvcHJpYXRlIGZvY3VzLlxuXG5JJ20gZmVlbGluZyBnb29kIGFib3V0IHRoZXNlIHNlbGVjdGlvbnMuIEkgdGhpbmsgdGhpcyBjb3ZlcnMgdGhlIGltcG9ydGFudCBhcmVhcy4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMzAsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjMwLjQzNDQ2OTQ1M1oiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTI0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIGFjcm9zcyBtdWx0aXBsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIChmcywgbmV0LCBrZXJuZWwsIGxpYikgYnkgcmVwbGFjaW5nIHBsYWluIHJlYWRzL3dyaXRlcyBhbmQgc21wX3JtYi93bWIgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIGNvbmN1cnJlbmN5IHNlbWFudGljcywgZml4aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbXByb3ZpbmcgY29ycmVjdG5lc3MuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBsb2dpYywgaW5jbHVkaW5nIGV4dDQgcmVzaXppbmcsIEFJTyBldmVudCByZWFkaW5nLCB1c2VyIG5hbWVzcGFjZSBJRCBtYXBwaW5nLCBDQU4gSVNPVFAgbWVzc2FnZSBzZW5kaW5nLCBhbmQgU09fUkVVU0VQT1JUIHNvY2tldCBzZWxlY3Rpb24uIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FDVFwiLFxuICAgIFwiR0FDVF9QUk9CXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwicGlkZmRfaW9jdGxcIixcbiAgICBcInByb2NfdWlkX21hcF93cml0ZVwiLFxuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwidGNmX2dhY3RfYWN0XCIsXG4gICAgXCJzeXNfaW9fZ2V0ZXZlbnRzXCIsXG4gICAgXCJyZXVzZXBvcnRfc2VsZWN0X3NvY2tcIixcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ2ZnNfZ2V0X3RyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIGFjcm9zcyBtdWx0aXBsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIChmcywgbmV0LCBrZXJuZWwsIGxpYikgYnkgcmVwbGFjaW5nIHBsYWluIHJlYWRzL3dyaXRlcyBhbmQgc21wX3JtYi93bWIgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIGNvbmN1cnJlbmN5IHNlbWFudGljcywgZml4aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbXByb3ZpbmcgY29ycmVjdG5lc3MuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBsb2dpYywgaW5jbHVkaW5nIGV4dDQgcmVzaXppbmcsIEFJTyBldmVudCByZWFkaW5nLCB1c2VyIG5hbWVzcGFjZSBJRCBtYXBwaW5nLCBDQU4gSVNPVFAgbWVzc2FnZSBzZW5kaW5nLCBhbmQgU09fUkVVU0VQT1JUIHNvY2tldCBzZWxlY3Rpb24uIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDQ6MzAuNTE0MDAyMTI3WiIsIlNlcSI6OTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU0ODY3MDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjMwLjUxNDU3MzgxN1oiLCJTZXEiOjk0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjU0ODA5NTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiODA4N2RhM2VhNDU4YWJhMGI0ZTFkMTI1MjlkMGJkN2I0MDVlYzRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MzY6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXG5pbmRleCBkNzhhY2M2OWY0ODcwLi40NDEzYzgyNjg4Y2M4IDEwMDY0NFxuLS0tIGEvZnMvYWlvLmNcbisrKyBiL2ZzL2Fpby5jXG5AQCAtMTIwNiwxMyArMTIwNiwxMiBAQCBzdGF0aWMgdm9pZCBhaW9fY29tcGxldGUoc3RydWN0IGFpb19raW9jYiAqaW9jYilcbiBcdC8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlXG4gXHQgKiBtdXN0IG5ldmVyIGV2ZW4gbG9vayBhdCBpdCBhZ2FpblxuIFx0ICovXG4tXHRzbXBfd21iKCk7XHQvKiBtYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cbi1cbi1cdGN0eC1cdTAwM2V0YWlsID0gdGFpbDtcbitcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZXRhaWwsIHRhaWwpO1xuIFxuIFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcdGhlYWQgPSByaW5nLVx1MDAzZWhlYWQ7XG4tXHRyaW5nLVx1MDAzZXRhaWwgPSB0YWlsO1xuK1x0LyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwsIHRhaWwpO1xuIFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXG4gXHRjdHgtXHUwMDNlY29tcGxldGVkX2V2ZW50cysrO1xuQEAgLTEyODgsMTMgKzEyODcsMTIgQEAgc3RhdGljIGxvbmcgYWlvX3JlYWRfZXZlbnRzX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LFxuIFx0LyogQWNjZXNzIHRvIC1cdTAwM2VyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtXHUwMDNlcmluZ19sb2NrLiAqL1xuIFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcdGhlYWQgPSByaW5nLVx1MDAzZWhlYWQ7XG4tXHR0YWlsID0gcmluZy1cdTAwM2V0YWlsO1xuLVxuIFx0LypcbiBcdCAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UndmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXRcbiBcdCAqIHdlIGFsc28gc2VlIHRoZSBldmVudHMgdGhhdCB3ZXJlIHN0b3JlZCB1cCB0byB0aGUgdGFpbC5cbitcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS5cbiBcdCAqL1xuLVx0c21wX3JtYigpO1xuK1x0dGFpbCA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2cmluZy1cdTAwM2V0YWlsKTtcbiBcbiBcdHByX2RlYnVnKFwiaCV1IHQldSBtJXVcXG5cIiwgaGVhZCwgdGFpbCwgY3R4LVx1MDAzZW5yX2V2ZW50cyk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXG4gfVxuIFxuIC8qXG4tICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCByZXF1aXJlcyB1c2luZyBzbXBfcm1iKCkgYWZ0ZXJ3YXJkcy4gIFNlZVxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcbi0gKiBpbiByZXNpemUuY1xuKyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuK1x0XHRuZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMpO1xuIFxuIFx0cmV0dXJuIG5ncm91cHM7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5pbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xuQEAgLTE0NjIsMTEgKzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbitcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXG4gXHQgKlxuLVx0ICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzXG4tXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4rXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4rXHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXRcbiBcdCAqIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovXG4tXHRzYmktXHUwMDNlc19ncm91cHNfY291bnQgKz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuK1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuK1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzXG4gXHQgKiBhY3RpdmUuICovXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxuLS0tIGEvZnMvZmlsZS5jXG4rKysgYi9mcy9maWxlLmNcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4cGFuZF9maWxlcygpICovXG4rXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXG4gXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cdTAwM2VhdHRyKTtcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0VYSVQpIHtcbi1cdFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXG4gXHRcdFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVx1MDAzZWNncm91cGlkO1xuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuK1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXHUwMDNlY29yZWR1bXBfbWFzaztcbiBcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uNTg2MGRhZWE2ZDQwNSAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yNjcsMTIgKzI2NywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdCAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XG4gXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xuLVx0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpc1xuLVx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXG4rXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIGFjcXVpcmUgaXMgbWF0Y2hlZFxuK1x0ICogd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYXMgd2UgZG9uJ3QgaG9sZCBsb2NrcyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9CT1JOKSlcbitcdGlmICghKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2ItXHUwMDNlc19mbGFncykgXHUwMDI2IFNCX0JPUk4pKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xuKysrIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbkBAIC0zMTcsOSArMzE3LDkgQEAgbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY29cbiBcbiBzdGF0aWMgdTMyIG1hcF9pZF9yYW5nZV9kb3duKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTM4Myw5ICszODMsOSBAQCBtYXBfaWRfcmFuZ2VfdXBfbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudFxuIFxuIHUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxuIHtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbitcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cyk7XG4gXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDtcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChleHRlbnRzIFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcbiBcdFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTY3Niw5ICs2NzYsOSBAQCBzdGF0aWMgaW50IHByb2ppZF9tX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcyxcbiBcdFx0ICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0bG9mZl90IHBvcyA9ICpwcG9zO1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKHBvcyBcdTAwM2U9IGV4dGVudHMpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTk2Nyw5ICs5NjcsMTEgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0ICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0XG4gXHQgKiB3ZXJlIHdyaXR0ZW4gYmVmb3JlIHRoZSBjb3VudCBvZiB0aGUgZXh0ZW50cy5cbiBcdCAqXG4tXHQgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZVxuLVx0ICogb3JkZXIgYW5kIHNtcF9ybWIoKSBpcyBndWFyYW50ZWVkIHRoYXQgd2UgZG9uJ3QgaGF2ZSBjcmF6eVxuLVx0ICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS5cbitcdCAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50XG4rXHQgKiBkYXRhLiAgV3JpdGVycyB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB0byBlbnN1cmUgYWxsIGV4dGVudFxuK1x0ICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZVxuK1x0ICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZlxuK1x0ICogdGhlIGV4dGVudCBkYXRhIHdoZW4gcmVhZGluZyBucl9leHRlbnRzLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnVzZXJuc19zdGF0ZV9tdXRleCk7XG4gXG5AQCAtMTA5OCw4ICsxMTAwLDggQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRtYXAtXHUwMDNlZm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDtcbiBcdFx0bWFwLVx1MDAzZXJldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7XG4gXHR9XG4tXHRzbXBfd21iKCk7XG4tXHRtYXAtXHUwMDNlbnJfZXh0ZW50cyA9IG5ld19tYXAubnJfZXh0ZW50cztcbitcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7XG4gXG4gXHQqcHBvcyA9IGNvdW50O1xuIFx0cmV0ID0gY291bnQ7XG5kaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuY1xuaW5kZXggZTI4NWU4YmM0NzEyYS4uZDZmMjM1ZTE0M2I3MiAxMDA2NDRcbi0tLSBhL2xpYi92c3ByaW50Zi5jXG4rKysgYi9saWIvdnNwcmludGYuY1xuQEAgLTc2Miw5ICs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZFxuIHtcbiBcdGdldF9yYW5kb21fYnl0ZXMoXHUwMDI2cHRyX2tleSwgc2l6ZW9mKHB0cl9rZXkpKTtcbiBcbi1cdC8qIFBhaXJzIHdpdGggc21wX3JtYigpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXG4tXHRzbXBfd21iKCk7XG4tXHRXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTtcbiBcdHJldHVybiBOT1RJRllfRE9ORTtcbiB9XG4gXG5AQCAtNzgxLDEyICs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaGFzaHZhbDtcbiBcbi1cdGlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuK1x0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovXG4tXHRzbXBfcm1iKCk7XG4tXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0aGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgXHUwMDI2cHRyX2tleSk7XG4gXHQvKlxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXG5pbmRleCAyZDJlZmI4Nzc5NzVkLi5lMzRhZGEwY2NlYWNmIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTcwLDEwICs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXG5pbmRleCBjNDFjYWFmOTQwOTVmLi42ZGI3MTcyYmRhYWNjIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTU2LDExICs1Niw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuK1x0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbitcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbiBcdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xuaW5kZXggMTU1NTMwYWVkY2UyZS4uMTFiNjUzYmE3YzEwOSAxMDA2NDRcbi0tLSBhL25ldC9jYW4vaXNvdHAuY1xuKysrIGIvbmV0L2Nhbi9pc290cC5jXG5AQCAtMTE1Niw4ICsxMTU2LDggQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRteV9nZW4gPSBpc290cF9pbmNfdHhfZ2VuKFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pKTtcbiBcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIG15X2dlbiwgRUNPTU0pOyAvKiBwcmV2ZW50IHN0YWxlIHNsb3QgbWF0Y2hpbmcgKi9cbiBcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHhfZ2VuLCBteV9nZW4pO1xuLVx0c21wX3dtYigpOyAvKiBzZWUgc21wX2xvYWRfYWNxdWlyZSgpIGluIGlzb3RwX3R4X1t0aW1lb3V0fGdlbl9kb25lXSAqL1xuLVx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbiBcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfcmV1c2Vwb3J0LmMgYi9uZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jXG5pbmRleCAyOTk0OGNiNDRiN2QxLi42ZDNjNTExZDFkZWY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuKysrIGIvbmV0L2NvcmUvc29ja19yZXVzZXBvcnQuY1xuQEAgLTEyNSw5ICsxMjUsOCBAQCBzdGF0aWMgdm9pZCBfX3JldXNlcG9ydF9hZGRfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSlcbiB7XG4gXHRyZXVzZS1cdTAwM2Vzb2Nrc1tyZXVzZS1cdTAwM2VudW1fc29ja3NdID0gc2s7XG4tXHQvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4tXHRzbXBfd21iKCk7XG4tXHRyZXVzZS1cdTAwM2VudW1fc29ja3MrKztcbitcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiByZXVzZXBvcnRfKHNlbGVjdHxtaWdyYXRlKV9zb2NrKCkgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJldXNlLVx1MDAzZW51bV9zb2NrcywgcmV1c2UtXHUwMDNlbnVtX3NvY2tzICsgMSk7XG4gXHRyZXVzZXBvcnRfZ2V0X2luY29taW5nX2NwdShzaywgcmV1c2UpO1xuIH1cbiBcbkBAIC0xNDAsNyArMTM5LDggQEAgc3RhdGljIGJvb2wgX19yZXVzZXBvcnRfZGV0YWNoX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRyZXVzZS1cdTAwM2Vzb2Nrc1tpXSA9IHJldXNlLVx1MDAzZXNvY2tzW3JldXNlLVx1MDAzZW51bV9zb2NrcyAtIDFdO1xuLVx0cmV1c2UtXHUwMDNlbnVtX3NvY2tzLS07XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gcmV1c2Vwb3J0XyhzZWxlY3R8bWlncmF0ZSlfc29jaygpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MsIHJldXNlLVx1MDAzZW51bV9zb2NrcyAtIDEpO1xuIFx0cmV1c2Vwb3J0X3B1dF9pbmNvbWluZ19jcHUoc2ssIHJldXNlKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU4MywxMSArNTgzLDkgQEAgc3RydWN0IHNvY2sgKnJldXNlcG9ydF9zZWxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cHJvZyA9IHJjdV9kZXJlZmVyZW5jZShyZXVzZS1cdTAwM2Vwcm9nKTtcbi1cdHNvY2tzID0gUkVBRF9PTkNFKHJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbitcdHNvY2tzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyZXVzZS1cdTAwM2VudW1fc29ja3MpO1xuIFx0aWYgKGxpa2VseShzb2NrcykpIHtcbi1cdFx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdFx0c21wX3JtYigpO1xuLVxuIFx0XHRpZiAoIXByb2cgfHwgIXNrYilcbiBcdFx0XHRnb3RvIHNlbGVjdF9ieV9oYXNoO1xuIFxuQEAgLTYzNCwxMyArNjMyLDExIEBAIHN0cnVjdCBzb2NrICpyZXVzZXBvcnRfbWlncmF0ZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdGlmICghcmV1c2UpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0c29ja3MgPSBSRUFEX09OQ0UocmV1c2UtXHUwMDNlbnVtX3NvY2tzKTtcbitcdC8qIHBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19yZXVzZXBvcnRfYWRkX3NvY2soKSAqL1xuK1x0c29ja3MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJldXNlLVx1MDAzZW51bV9zb2Nrcyk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2tzKSlcbiBcdFx0Z290byBmYWlsdXJlO1xuIFxuLVx0LyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIF9fcmV1c2Vwb3J0X2FkZF9zb2NrKCkgKi9cbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGhhc2ggPSBtaWdyYXRpbmdfc2stXHUwMDNlc2tfaGFzaDtcbiBcdHByb2cgPSByY3VfZGVyZWZlcmVuY2UocmV1c2UtXHUwMDNlcHJvZyk7XG4gXHRpZiAoIXByb2cgfHwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfU0tfUkVVU0VQT1JUX1NFTEVDVF9PUl9NSUdSQVRFKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuaW5kZXggNTY1ODYwY2NjYmE2ZC4uZDRmMzlmOThlMmNmMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2dhY3QuY1xuQEAgLTI1LDcgKzI1LDYgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcztcbiAjaWZkZWYgQ09ORklHX0dBQ1RfUFJPQlxuIHN0YXRpYyBpbnQgZ2FjdF9uZXRfcmFuZChzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpXG4ge1xuLVx0c21wX3JtYigpOyAvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRjZl9nYWN0X2luaXQoKSAqL1xuIFx0aWYgKGdldF9yYW5kb21fdTMyX2JlbG93KGdhY3QtXHUwMDNldGNmZ19wdmFsKSlcbiBcdFx0cmV0dXJuIGdhY3QtXHUwMDNldGNmX2FjdGlvbjtcbiBcdHJldHVybiBnYWN0LVx1MDAzZXRjZmdfcGFjdGlvbjtcbkBAIC0zNSw3ICszNCw2IEBAIHN0YXRpYyBpbnQgZ2FjdF9kZXRlcm0oc3RydWN0IHRjZl9nYWN0ICpnYWN0KVxuIHtcbiBcdHUzMiBwYWNrID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2Z2FjdC1cdTAwM2VwYWNrZXRzKTtcbiBcbi1cdHNtcF9ybWIoKTsgLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0Y2ZfZ2FjdF9pbml0KCkgKi9cbiBcdGlmIChwYWNrICUgZ2FjdC1cdTAwM2V0Y2ZnX3B2YWwpXG4gXHRcdHJldHVybiBnYWN0LVx1MDAzZXRjZl9hY3Rpb247XG4gXHRyZXR1cm4gZ2FjdC1cdTAwM2V0Y2ZnX3BhY3Rpb247XG5AQCAtMTMzLDExICsxMzEsOCBAQCBzdGF0aWMgaW50IHRjZl9nYWN0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRpZiAocF9wYXJtKSB7XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wYWN0aW9uID0gcF9wYXJtLVx1MDAzZXBhY3Rpb247XG4gXHRcdGdhY3QtXHUwMDNldGNmZ19wdmFsICAgID0gbWF4X3QodTE2LCAxLCBwX3Bhcm0tXHUwMDNlcHZhbCk7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0Y2ZnX3B2YWwgaXMgd3JpdHRlbiBiZWZvcmUgdGNmZ19wdHlwZVxuLVx0XHQgKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGdhY3RfbmV0X3JhbmQoKSBcdTAwMjYgZ2FjdF9kZXRlcm0oKVxuLVx0XHQgKi9cbi1cdFx0c21wX3dtYigpO1xuLVx0XHRnYWN0LVx1MDAzZXRjZmdfcHR5cGUgICA9IHBfcGFybS1cdTAwM2VwdHlwZTtcbitcdFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGNmX2dhY3RfYWN0KCkuICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmdhY3QtXHUwMDNldGNmZ19wdHlwZSwgcF9wYXJtLVx1MDAzZXB0eXBlKTtcbiBcdH1cbiAjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdhY3QtXHUwMDNldGNmX2xvY2spO1xuQEAgLTE2MCw3ICsxNTUsOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gI2lmZGVmIENPTkZJR19HQUNUX1BST0JcbiBcdHtcbi1cdHUzMiBwdHlwZSA9IFJFQURfT05DRShnYWN0LVx1MDAzZXRjZmdfcHR5cGUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHRjZl9nYWN0X2luaXQoKSAqL1xuK1x0dTMyIHB0eXBlID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZnYWN0LVx1MDAzZXRjZmdfcHR5cGUpO1xuIFxuIFx0aWYgKHB0eXBlKVxuIFx0XHRhY3Rpb24gPSBnYWN0X3JhbmRbcHR5cGVdKGdhY3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6NDQ6MzAuNTE0NTc0NTc3WiIsIlNlcSI6OTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NTQ4MDcwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrOiBBY3F1aXJlL1JlbGVhc2UgTWVtb3J5IEJhcnJpZXIgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIGBzbXBfcm1iKClgL2BzbXBfd21iKClgIHdpdGggdGhlIG1vcmUgbW9kZXJuIGBzbXBfbG9hZF9hY3F1aXJlKClgL2BzbXBfc3RvcmVfcmVsZWFzZSgpYCBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zIGxpa2UgQUlPLCBleHQ0LCBmaWxlIHN5c3RlbXMsIGFuZCBuZXR3b3JraW5nLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgbWVtb3J5IGJhcnJpZXIgbW9kZXJuaXphdGlvbiBlZmZvcnQsIHdoaWNoIGlzIGdvb2QgaG91c2VrZWVwaW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZXNlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSBuZXcgd2F5cyBmb3IgdGhlIGtlcm5lbCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgYWZ0ZXIgYSBxdWljayBzY2FuLCBpdCBkb2Vzbid0IGFwcGVhciB0aGF0IGFueSBuZXcgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQuIEZ1cnRoZXJtb3JlLCB3ZSBhcmVuJ3QgY2hhbmdpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocywgbm9yIGlzIGFueXRoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS5cblxuRGlnZ2luZyBpbiBhIGxpdHRsZSBkZWVwZXIsIHRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZXBsYWNlbWVudHMgb2YgbWVtb3J5IGJhcnJpZXJzIHdpdGggYWNxdWlyZS9yZWxlYXNlIG9wZXJhdGlvbnMuIFRoZXNlIG9wZXJhdGlvbnMgaW5oZXJlbnRseSBwcm92aWRlIG1lbW9yeSBvcmRlcmluZyBndWFyYW50ZWVzLCBqdXN0IGxpa2UgdGhlIG9sZCBiYXJyaWVycyBkaWQsIHNvIGNvbmNlcHR1YWxseSwgd2UncmUgbWFraW5nIHRoZSBjb2RlIHNhZmVyIG9yIGF0IGxlYXN0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LlxuXG5JIGRpZCBhIGxpbmUtYnktbGluZSBpbnNwZWN0aW9uIG9mIGFsbCB0aGUgY2hhbmdlcywgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGVzIGdpdmVuLlxuXG5JbiB0aGUgY2FzZSBvZiBgZnMvYWlvLmNgLCBmb3IgZXhhbXBsZSwgdGhlIGNvbnZlcnNpb24gaXMgYSBzdGFuZGFyZCBgc21wX3dtYigpYCBhbmQgYXNzaWdubWVudCB0byBhIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCwgd2hpY2ggaXMgcGVyZmVjdGx5IGZpbmUuIGBmcy9leHQ0L2V4dDQuaGAgaXMgYW5vdGhlciBleGFtcGxlIG9mIHN0YW5kYXJkIGNvbnZlcnNpb24uIGBmcy9maWxlLmNgLCBgZnMvcGlkZnMuY2AsIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AsIGBsaWIvdnNwcmludGYuY2AsIGBuZXQvODAyMXEvdmxhbi5jYCwgYG5ldC9jYW4vaXNvdHAuY2AsIGBuZXQvY29yZS9zb2NrX3JldXNlcG9ydC5jYCwgYW5kIGBuZXQvc2NoZWQvYWN0X2dhY3QuY2AgYWxzbyBzaG93IHN0YW5kYXJkIGNvbnZlcnNpb25zLiBOb3RoaW5nIGp1bXBzIG91dCBhcyBwcm9ibGVtYXRpYyBoZXJlLiBObyBuZXcsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSB2aXNpYmxlLlxuXG5Fc3NlbnRpYWxseSwgYWxsIHRoZSBjaGFuZ2VzIGFyZSBqdXN0IHJlcGxhY2luZyBtZW1vcnkgYmFycmllcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2UuIFRoZSBvbGQgYmFycmllcnMgZW5zdXJlZCB0aGUgcmVhZHMgYW5kIHdyaXRlcyB3ZXJlIG9yZGVyZWQgYXMgaW50ZW5kZWQgYW5kIHRoZSBuZXcgaW5zdHJ1Y3Rpb25zIGRvIHRoZSBzYW1lIHRoaW5nLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlZmFjdG9yaW5nLCBhbmQgaW50cm9kdWNlIG5vdGhpbmcgbmV3LCBhIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQuIElmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaXNzdWVzIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIGluY29ycmVjdCBtZW1vcnkgb3JkZXJpbmcpLCB0aGV5J2QgYmUgY2F1Z2h0IGJ5IEtDU0FOIG9yIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIGNvZGUgcmV2aWV3LiBUaGlzIGlzbid0IGEgS01TQU4gaXNzdWUsIHNvIE5lZWRzS01TQU4gaXMgZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjcsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjQ0OjQ3LjA2MjY0OTcxNloiLCJTZXEiOjk2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGlzIGEgcmVmYWN0b3JpbmcgdGhhdCByZXBsYWNlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgIGFuZCBgc21wX3dtYigpYCkgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChgc21wX2xvYWRfYWNxdWlyZSgpYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlKClgKSBhY3Jvc3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGZpZWxkcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3MgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gaW5jb3JyZWN0IG1lbW9yeSBvcmRlcmluZyksIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcsIG5vdCBLTVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaXMgYSByZWZhY3RvcmluZyB0aGF0IHJlcGxhY2VzIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWIoKWAgYW5kIGBzbXBfd21iKClgKSB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKGBzbXBfbG9hZF9hY3F1aXJlKClgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2UoKWApIGFjcm9zcyB2YXJpb3VzIHN1YnN5c3RlbXMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZmllbGRzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgY29uY3VycmVuY3kgYnVncyAoZS5nLiwgcmFjZSBjb25kaXRpb25zIGR1ZSB0byBpbmNvcnJlY3QgbWVtb3J5IG9yZGVyaW5nKSwgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4gb3Igc3RhbmRhcmQgdGVzdGluZywgbm90IEtNU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowngqbq[1] Phase: Succeeded StartedAt: 2026-08-25 10:44:58 +0000 UTC FinishedAt: 2026-08-25 10:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 10:44:58 +0000 UTC FinishedAt: 2026-08-25 10:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2] Phase: Running StartedAt: 2026-08-25 10:44:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-25 10:44:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 10:44:58 +0000 UTC FinishedAt: 2026-08-25 10:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 10:44:58 +0000 UTC FinishedAt: 2026-08-25 10:45:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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-workflowngqbq/series-workflowngqbq-convert-artifact-626375624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 10:45:08 +0000 UTC FinishedAt: 2026-08-25 11:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 10:45:08 +0000 UTC FinishedAt: 2026-08-25 11:01: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:*3283675d-5acf-4637-be7b-7a5841bb1d1a,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-workflowngqbq/series-workflowngqbq-convert-artifact-626375624/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": "495ba7ff-d9c2-44ad-a1e6-907403fbd543", "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-workflowngqbq/series-workflowngqbq-build-action-2050205758/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 10:45:08 +0000 UTC FinishedAt: 2026-08-25 11:01:48 +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:*3283675d-5acf-4637-be7b-7a5841bb1d1a,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-workflowngqbq/series-workflowngqbq-convert-artifact-626375624/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": "495ba7ff-d9c2-44ad-a1e6-907403fbd543", "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-workflowngqbq/series-workflowngqbq-build-action-2050205758/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 11:01:58 +0000 UTC FinishedAt: 2026-08-25 11:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 11:01:58 +0000 UTC FinishedAt: 2026-08-25 11:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 11:01:58 +0000 UTC FinishedAt: 2026-08-25 11:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-25 11:01:58 +0000 UTC FinishedAt: 2026-08-25 11:02:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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-workflowngqbq/series-workflowngqbq-convert-artifact-4104399023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Running StartedAt: 2026-08-25 11:02:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngqbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"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/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["ext4_resize_fs","pidfd_ioctl","proc_uid_map_write","isotp_sendmsg","tcf_gact_act","sys_io_getevents","reuseport_select_sock","register_vlan_dev","vfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","CAN","CAN_ISOTP","NET_CLS_ACT","NET_ACT_GACT","GACT_PROB","AIO","VLAN_8021Q"],"series_id":"a5fd2106-d30e-41d7-9ec7-56c6158c22f8","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: Running StartedAt: 2026-08-25 11:02:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*495ba7ff-d9c2-44ad-a1e6-907403fbd543,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-workflowngqbq/series-workflowngqbq-build-action-2050205758/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil