Name: series-workflow8nmwh Phase: Succeeded StartedAt: 2026-09-04 04:51:23 +0000 UTC FinishedAt: 2026-09-04 08:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[0] Phase: Succeeded StartedAt: 2026-09-04 04:51:23 +0000 UTC FinishedAt: 2026-09-04 05:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 04:51:23 +0000 UTC FinishedAt: 2026-09-04 05:13:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "49c067a6-e51f-4912-8631-337644bd7fcb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "reclaimable_anon_is_low", "can_reclaim_anon_pages", "get_lruvec", "get_scan_count", "zone_reclaimable_pages", "shrink_lruvec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9scnV2ZWMmIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbiBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGhlbHBlciBhbmQgaW52b2tpbmcgaXQgZnJvbSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVG8gc3VwcG9ydCB0aGlzLCBgZ2V0X2xydXZlYygpYCBpcyByZWxvY2F0ZWQgZWFybGllciBpbiB0aGUgZmlsZS5cblxuQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgLCBgbHJ1dmVjYCkgYXJlIGltbWVkaWF0ZWx5IGFuZCBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIGtlcm5lbCBzdGF0ZSBmdW5jdGlvbnMgKGBnZXRfbHJ1dmVjKClgIGFuZCBgbHJ1dmVjX3BhZ2Vfc3RhdGUoKWApLiBUaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG8gbm90IG1vZGlmeSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcsIGRvIG5vdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY3Jvc3Mga2VybmVsL3VzZXIgYm91bmRhcmllcyAoZS5nLiB2aWEgY29weV90b191c2VyIG9yIG5ldGxpbmspLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBpbnZhbGlkIHN0cnVjdCBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnIGNvbmZpZ3VyYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTA3Zjk1N2ZiODE1ZDEwNmM3MDcxNWY4ZGNkODgzMGVjYjliODY2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MTE6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTMzOSw2ICYjNDM7MzM5LDQyIEBAIHN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO1x0aWYgKG1lbWNnKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqL1xuJiM0MztcdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4mIzQzO1x0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBscnV2ZWM7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzYyB8fCAoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0YW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MztcbiYjNDM7XHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4mIzQzO1x0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5AQCAtMzQ4LDExICYjNDM7Mzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxuIFx0XHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4gXHRcdCAqL1xuLVx0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMClcbiYjNDM7XHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovXG4tXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMClcbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTI2NzQsMjYgJiM0MzsyNzEyLDYgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxuICNkZWZpbmUgZ2V0X21lbWNnX2dlbihzZXEpXHQoKHNlcSkgJSBNRU1DR19OUl9HRU5TKVxuICNkZWZpbmUgZ2V0X21lbWNnX2JpbihiaW4pXHQoKGJpbikgJSBNRU1DR19OUl9CSU5TKVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi17XG4tXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG4tXG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0aWYgKG1lbWNnKSB7XG4tXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IFx1MDAyNm1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlbHJ1dmVjO1xuLVxuLVx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqL1xuLVx0XHRpZiAoIWxydXZlYy1cdTAwM2VwZ2RhdClcbi1cdFx0XHRscnV2ZWMtXHUwMDNlcGdkYXQgPSBwZ2RhdDtcbi1cbi1cdFx0cmV0dXJuIGxydXZlYztcbi1cdH1cbi0jZW5kaWZcbi1cdFZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKTtcbi1cbi1cdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbi19XG4tXG4gc3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9scnV2ZWMmIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTA3Zjk1N2ZiODE1ZDEwNmM3MDcxNWY4ZGNkODgzMGVjYjliODY2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDU6MTE6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDU2NzA4ZDFkMmRmZDUuLjE5MmJkMDk4MDEyMTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0zMzksNiAmIzQzOzMzOSw0MiBAQCBzdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAogCXJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiYjNDM7CWlmIChtZW1jZykgewomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gJmFtcDttZW1jZy0mZ3Q7bm9kZWluZm9bbmlkXS0mZ3Q7bHJ1dmVjOwomIzQzOwomIzQzOwkJLyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi8KJiM0MzsJCWlmICghbHJ1dmVjLSZndDtwZ2RhdCkKJiM0MzsJCQlscnV2ZWMtJmd0O3BnZGF0ID0gcGdkYXQ7CiYjNDM7CiYjNDM7CQlyZXR1cm4gbHJ1dmVjOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CVZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTsKJiM0MzsKJiM0MzsJaWYgKCFzYyB8fCAoc2MtJmd0O2dmcF9tYXNrICZhbXA7IF9fR0ZQX0lPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJYW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCSAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7CiYjNDM7CXN3YXBjYWNoZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfU1dBUENBQ0hFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN3YXBjYWNoZSAmbHQ7IG1pbihhbm9uX3BhZ2VzICZndDsmZ3Q7IDYsIFNXQVBfQ0xVU1RFUl9NQVgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQpAQCAtMzQ4LDExICYjNDM7Mzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZQogCQkgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/CiAJCSAqLwotCQlpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDApCiYjNDM7CQlpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkJICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9IGVsc2UgewogCQkvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovCi0JCWlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSAmZ3Q7IDApCiYjNDM7CQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0yNjc0LDI2ICYjNDM7MjcxMiw2IEBAIHN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZCkKICNkZWZpbmUgZ2V0X21lbWNnX2dlbihzZXEpCSgoc2VxKSAlIE1FTUNHX05SX0dFTlMpCiAjZGVmaW5lIGdldF9tZW1jZ19iaW4oYmluKQkoKGJpbikgJSBNRU1DR19OUl9CSU5TKQogCi1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCi17Ci0Jc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwotCi0jaWZkZWYgQ09ORklHX01FTUNHCi0JaWYgKG1lbWNnKSB7Ci0JCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9ICZhbXA7bWVtY2ctJmd0O25vZGVpbmZvW25pZF0tJmd0O2xydXZlYzsKLQotCQkvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqLwotCQlpZiAoIWxydXZlYy0mZ3Q7cGdkYXQpCi0JCQlscnV2ZWMtJmd0O3BnZGF0ID0gcGdkYXQ7Ci0KLQkJcmV0dXJuIGxydXZlYzsKLQl9Ci0jZW5kaWYKLQlWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7Ci0KLQlyZXR1cm4gJmFtcDtwZ2RhdC0mZ3Q7X19scnV2ZWM7Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZNc2NhbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIG1ha2luZyBzb21lIHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGFub255bW91cyBwYWdlIHJlY2xhbWF0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW4uCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyYWwgc2hpZnRzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIEkga25vdyBpbnRpbWF0ZWx5LCBpcyBjZW50cmFsIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcGFnZSByZWNsYWltIHByb2Nlc3Nlcy4gSXQmIzM5O3Mgc2ltcGx5IHJlb3JnYW5pemluZyBgZ2V0X2xydXZlYygpYCDigJMgbW92aW5nIGl0IGVhcmxpZXIgaW4gdGhlIGZpbGUuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmU7IHRoaXMgY291bGQgYmUgYSBtaW5vciByZWZhY3RvcmluZyBmb3IgcmVhZGFiaWxpdHkgb3IgcG9zc2libHkgdG8gZmFjaWxpdGF0ZSBhIGZ1dHVyZSBjaGFuZ2UuCgpUaGUgbWVhdCBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb3JlIGdyYW51bGFyIGNoZWNrIHJlbGF0ZWQgdG8gdGhlIGF2YWlsYWJpbGl0eSBvciBwb3RlbnRpYWwgc2NhcmNpdHkgb2YgcmVjbGFpbWFibGUgYW5vbnltb3VzIHBhZ2VzLiBUaGVuLCBsb29raW5nIGF0IHRoZSBjYWxsIHRvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgIGlzIGtleS4KClRoZSBjcml0aWNhbCBjaGFuZ2UgbGllcyB3aXRoaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIEl0IGFwcGVhcnMgd2UmIzM5O3JlIGFkZGluZyBhbiBhZGRpdGlvbmFsIGNvbmRpdGlvbjogYCZhbXA7JmFtcDsgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKWAgd2hlbiBlaXRoZXIgdGhlIGdsb2JhbCBzd2FwIHVzYWdlIG9yIHRoZSBtZW1vcnkgY2dyb3VwIHN3YXAgdXNhZ2UgaXMgZ3JlYXRlciB0aGFuIHplcm8uIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHBpZWNlLiBJdCBpbmRpY2F0ZXMgdGhhdCB3aGVuIHN3YXAgaXMgaW4gdXNlIChvciBwb3RlbnRpYWxseSBjbG9zZSB0byBiZWluZyB1c2VkKSwgdGhlIG5ldyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uJiMzOTtzIHJldHVybiB2YWx1ZSB3aWxsIGVmZmVjdCBwYWdlIHJlY2xhaW0uIFRoZSBzeXN0ZW0gd2lsbCAqbm90KiByZWNsYWltIGFub255bW91cyBwYWdlcyBpZiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgcmV0dXJucyB0cnVlLgoKTm93LCBteSBtaW5kIGdvZXMgdG8gdGhlIGltcGFjdC4gVGhpcyBzdWdnZXN0cyBhIG1vcmUgY2F1dGlvdXMgYXBwcm9hY2ggdG8gYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSB3aGVuIHN3YXAgaXMgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgd2l0aGluIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBhbmQgaG93IGl0IGRldGVybWluZXMgJiMzNDtsb3cmIzM0OyByZWNsYWltYWJsZSBhbm9uIHBhZ2VzLgoKVG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgZWZmZWN0LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZmluZCB3aGVyZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGBtbS92bXNjYW4uY2AgY29udGV4dC4gSSYjMzk7bGwgZWl0aGVyIGdyZXAgZm9yIGl0cyB1c2FnZXMgb3Igc2ltcGx5IHJlYWQgdGhyb3VnaCB0aGUgZmlsZSB0byBpZGVudGlmeSB0aGUgY2FsbCBzaXRlcyBhbmQgaG93IHRoaXMgY2hhbmdlIGNhc2NhZGVzIHRocm91Z2ggdGhlIHNjYW5uaW5nIHByb2Nlc3MuIFRoaXMgd2lsbCBsZXQgbWUgYXNzZXNzIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhbl9yZWNsYWltX2Fub25fcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0zNjI9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0zNzctXG5tbS92bXNjYW4uYzozNzg6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtMzc5LVx0XHRcdFx0XHQgIGludCBuaWQsXG4tLVxubW0vdm1zY2FuLmM9NDEwPXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS92bXNjYW4uYy00MTUtXHRcdHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKTtcbm1tL3Ztc2Nhbi5jOjQxNjpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHpvbmVfdG9fbmlkKHpvbmUpLCBOVUxMKSlcbm1tL3Ztc2Nhbi5jLTQxNy1cdFx0bnIgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pICYjNDM7XG4tLVxubW0vdm1zY2FuLmM9MjUzMT1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI1NDItXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG5tbS92bXNjYW4uYzoyNTQzOlx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG5tbS92bXNjYW4uYy0yNTQ0LVx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG4tLVxubW0vdm1zY2FuLmM9NDA3MD1zdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MDgyLVx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NDA4MzpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQwODQtXHRcdHJlY2xhaW1hYmxlICYjNDM7PSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xuLS1cbm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNjA3OC1cdGluYWN0aXZlX2xydV9wYWdlcyA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XG5tbS92bXNjYW4uYzo2MDc5Olx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxubW0vdm1zY2FuLmMtNjA4MC1cdFx0aW5hY3RpdmVfbHJ1X3BhZ2VzICYjNDM7PSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEFub255bW91cyBQYWdlIFJlY2xhbWF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgbWVtb3J5IGlzc3VlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgbXkgYmVhcmluZ3MgaW4gYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZHJpbGwgZG93biBhcm91bmQgdGhlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBmdW5jdGlvbiBhbmQgdGhlIHdheSBgZ2V0X3NjYW5fY291bnRgIGlzIGhhbmRsZWQuIE15IGh1bmNoIGlzIHRoYXQgdGhlIGxvZ2ljIGdvdmVybmluZyBhbm9ueW1vdXMgcGFnZSByZWNsYW1hdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBoZXJlIOKAkyB3aGVuIGFyZSB3ZSBhY3R1YWxseSBjaG9vc2luZyB0byByZWNsYWltIGFub24gcGFnZXMsIGFuZCBob3cgYXJlIHdlIGRldGVybWluaW5nICpob3cgbXVjaCogdG8gcmVjbGFpbT8gQXJlIHdlIGJlaW5nIHRvbyBhZ2dyZXNzaXZlLCB0b28gY29uc2VydmF0aXZlLCBvciBpcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBhbWlzcyBpbiB0aGUgYWNjb3VudGluZz8gVGltZSB0byB0cmFjZSB0aGUgY29kZSBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHR9XG4gMzQxOlx0XG4gMzQyOlx0c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIDM0MzpcdHtcbiAzNDQ6XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbiAzNDU6XHRcbiAzNDY6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gMzQ3Olx0XHRpZiAobWVtY2cpIHtcbiAzNDg6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXHUwMDI2bWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWM7XG4gMzQ5Olx0XG4gMzUwOlx0XHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXG4gMzUxOlx0XHRcdGlmICghbHJ1dmVjLVx1MDAzZXBnZGF0KVxuIDM1MjpcdFx0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuIDM1MzpcdFxuIDM1NDpcdFx0XHRyZXR1cm4gbHJ1dmVjO1xuIDM1NTpcdFx0fVxuIDM1NjpcdCNlbmRpZlxuIDM1NzpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuIDM1ODpcdFxuIDM1OTpcdFx0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuIDM2MDpcdH1cbiAzNjE6XHRcbiAzNjI6XHRzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDM2MzpcdFx0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiAzNjQ6XHR7XG4gMzY1Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuIDM2NjpcdFx0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4gMzY3Olx0XG4gMzY4Olx0XHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIDM2OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzcwOlx0XG4gMzcxOlx0XHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuIDM3MjpcdFx0XHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuIDM3MzpcdFx0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xuIDM3NDpcdFxuIDM3NTpcdFx0cmV0dXJuIHN3YXBjYWNoZSBcdTAwM2MgbWluKGFub25fcGFnZXMgXHUwMDNlXHUwMDNlIDYsIFNXQVBfQ0xVU1RFUl9NQVgpO1xuIDM3NjpcdH1cbiAzNzc6XHRcbiAzNzg6XHRzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gMzc5Olx0XHRcdFx0XHRcdCAgaW50IG5pZCxcbiAzODA6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiAzODE6XHR7XG4gMzgyOlx0XHRpZiAobWVtY2cgPT0gTlVMTCkge1xuIDM4MzpcdFx0XHQvKlxuIDM4NDpcdFx0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlXG4gMzg1Olx0XHRcdCAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbiAzODY6XHRcdFx0ICovXG4gMzg3Olx0XHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDM4ODpcdFx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiAzODk6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzOTA6XHRcdH0gZWxzZSB7XG4gMzkxOlx0XHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbiAzOTI6XHRcdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDM5MzpcdFx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiAzOTQ6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzOTU6XHRcdH1cbiAzOTY6XHRcbiAzOTc6XHRcdC8qXG4gMzk4Olx0XHQgKiBUaGUgcGFnZSBjYW4gbm90IGJlIHN3YXBwZWQuXG4gMzk5Olx0XHQgKlxuIDQwMDpcdFx0ICogQ2FuIGl0IGJlIHJlY2xhaW1lZCBmcm9tIHRoaXMgbm9kZSB2aWEgZGVtb3Rpb24/XG4gNDAxOlx0XHQgKi9cbiA0MDI6XHRcdHJldHVybiBjYW5fZGVtb3RlKG5pZCwgc2MsIG1lbWNnKTtcbiA0MDM6XHR9XG4gNDA0Olx0XG4gNDA1Olx0LypcbiA0MDY6XHQgKiBUaGlzIG1pc3NlcyBpc29sYXRlZCBmb2xpb3Mgd2hpY2ggYXJlIG5vdCBhY2NvdW50ZWQgZm9yIHRvIHNhdmUgY291bnRlcnMuXG4gNDA3Olx0ICogQXMgdGhlIGRhdGEgb25seSBkZXRlcm1pbmVzIGlmIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBjb250aW51ZXMsIGl0IGlzXG4gNDA4Olx0ICogbm90IGV4cGVjdGVkIHRoYXQgaXNvbGF0ZWQgZm9saW9zIHdpbGwgYmUgYSBkb21pbmF0aW5nIGZhY3Rvci5cbiA0MDk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc2CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb2RlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggZGVhbHMgd2l0aCBtZW1vcnkgcmVjbGFpbSwgc3dhcHBpbmcsIGFuZCBzY2FuIGJhbGFuY2luZy4gR2l2ZW4gdGhhdCwgaXQmIzM5O3MgcHJldHR5IGxpa2VseSB0aGlzIGFyZWEgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMg4oCTIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIHBvdGVudGlhbGx5IHRoZSBzY2hlZHVsZXIgaWYgcmVjbGFpbSBpcyBpbnZvbHZlZCwgbWF5YmUgZXZlbiBCUEYgaWYgdGhleSYjMzk7cmUgZG9pbmcgc29tZXRoaW5nIGNsZXZlciB3aXRoIHBhZ2UgYWxsb2NhdGlvbi4gWWVwLCBsb29rcyBsaWtlIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlIGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWwgYEZvY3VzU3ltYm9sc2AgZm9yIGZ1enppbmcuIEEga2V5IGZ1bmN0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0Li4uIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYGdldF9zY2FuX2NvdW50YCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YCwgYW5kIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAuIEhtbSwgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhlc2UuCgpXYWl0IGEgc2Vjb25k4oCmIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBpcyBgc3RhdGljIGlubGluZWA/IE9rYXksIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgZnV6emluZyBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuICBTaW1pbGFybHksIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AgaXMgYWxzbyBzdGF0aWMgaW5saW5lLiBUaGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzLCBidXQgaXQmIzM5O3Mgc3RpbGwgd29ydGggaW52ZXN0aWdhdGluZyBpdHMgY2FsbGVycywgYmVjYXVzZSB0aGUgaW5saW5pbmcgbWF5IGJlIGEgZ29vZCBvcHBvcnR1bml0eSBmb3Igc29tZSBpbnRlcmVzdGluZyBtdXRhdGlvbi4gIFdoYXQgYWJvdXQgYGdldF9scnV2ZWNgPyBZdXAsIHRoYXQmIzM5O3MgYWxzbyBzdGF0aWMuIEFscmlnaHQuCgpTbywgSeKAmWxsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgY2FsbGVycyBub3c6IGBnZXRfc2Nhbl9jb3VudGAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YCwgYW5kIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgYW5kIHRoZW4gZXZhbHVhdGUgb3RoZXIgbm9uLXViaXF1aXRvdXMgY2FsbGVycyBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGZ1enogdGFyZ2V0IG5lZWRzIHRvIGZvY3VzIG9uIHRob3NlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfc2Nhbl9jb3VudHx6b25lX3JlY2xhaW1hYmxlX3BhZ2VzfHNldF9pbml0aWFsX3ByaW9yaXR5fHNob3VsZF9jb250aW51ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Mzc4PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00MDktICovXG5tbS92bXNjYW4uYzo0MTA6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxubW0vdm1zY2FuLmMtNDExLXtcbi0tXG5tbS92bXNjYW4uYz01MTg9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNTM1LVx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG5tbS92bXNjYW4uYzo1MzY6XHRcdHJlY2xhaW1hYmxlICYjNDM7PSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpO1xubW0vdm1zY2FuLmMtNTM3LVx0XHR3cml0ZV9wZW5kaW5nICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcbi0tXG5tbS92bXNjYW4uYz0yNDYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0yNTMwLSAqL1xubW0vdm1zY2FuLmM6MjUzMTpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtMjUzMi1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpucilcbi0tXG5tbS92bXNjYW4uYz00MDEyPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwNjktXG5tbS92bXNjYW4uYzo0MDcwOnN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDA3MS17XG4tLVxubW0vdm1zY2FuLmM9NDE1MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxNTgtXG5tbS92bXNjYW4uYzo0MTU5Olx0c2V0X2luaXRpYWxfcHJpb3JpdHkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTQxNjAtXG4tLVxubW0vdm1zY2FuLmM9NTE1ND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNzQtXG5tbS92bXNjYW4uYzo1MTc1Olx0c2V0X2luaXRpYWxfcHJpb3JpdHkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxNzYtXG4tLVxubW0vdm1zY2FuLmM9NTg5ND1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTkxMi1cbm1tL3Ztc2Nhbi5jOjU5MTM6XHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XG5tbS92bXNjYW4uYy01OTE0LVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NTUtXHRcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxubW0vdm1zY2FuLmM6NTk1NjpcdFx0ICogcHJvcG9ydGlvbmFsbHkgd2hhdCB3YXMgcmVxdWVzdGVkIGJ5IGdldF9zY2FuX2NvdW50KCkuIFdlXG5tbS92bXNjYW4uYy01OTU3LVx0XHQgKiBzdG9wIHJlY2xhaW1pbmcgb25lIExSVSBhbmQgcmVkdWNlIHRoZSBhbW91bnQgc2Nhbm5pbmdcbi0tXG5tbS92bXNjYW4uYz02MDE2PXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDI3LSAqIFJlY2xhaW0vY29tcGFjdGlvbiBpcyB1c2VkIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuIEl0IHJlY2xhaW1zXG5tbS92bXNjYW4uYzo2MDI4OiAqIG9yZGVyLTAgcGFnZXMgYmVmb3JlIGNvbXBhY3RpbmcgdGhlIHpvbmUuIHNob3VsZF9jb250aW51ZV9yZWNsYWltKCkgcmV0dXJuc1xubW0vdm1zY2FuLmMtNjAyOS0gKiB0cnVlIGlmIG1vcmUgcGFnZXMgc2hvdWxkIGJlIHJlY2xhaW1lZCBzdWNoIHRoYXQgd2hlbiB0aGUgcGFnZSBhbGxvY2F0b3Jcbi0tXG5tbS92bXNjYW4uYy02MDMyLSAqL1xubW0vdm1zY2FuLmM6NjAzMzpzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTYwMzQtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLFxuLS1cbm1tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjI2MS1cbm1tL3Ztc2Nhbi5jOjYyNjI6XHRpZiAoc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0ocGdkYXQsIG5yX25vZGVfcmVjbGFpbWVkLCBzYykpXG5tbS92bXNjYW4uYy02MjYzLVx0XHRnb3RvIGFnYWluO1xuLS1cbm1tL3Ztc2Nhbi5jPTYyODI9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fcmVhZHkoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzMDAtXHQgKiBOb3RlIHRoYXQgd2Ugd29uJiMzOTt0IGFjdHVhbGx5IHJlY2xhaW0gdGhlIHdob2xlIGJ1ZmZlciBpbiBvbmUgYXR0ZW1wdFxubW0vdm1zY2FuLmM6NjMwMTpcdCAqIGFzIHRoZSB0YXJnZXQgd2F0ZXJtYXJrIGluIHNob3VsZF9jb250aW51ZV9yZWNsYWltKCkgaXMgbG93ZXIuIEJ1dCBpZlxubW0vdm1zY2FuLmMtNjMwMi1cdCAqIHdlIGFyZSBhbHJlYWR5IGFib3ZlIHRoZSBoaWdoJiM0MztnYXAgd2F0ZXJtYXJrLCBkb24mIzM5O3QgcmVjbGFpbSBhdCBhbGwuXG4tLVxubW0vdm1zY2FuLmM9NjU2OT1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1ODAtXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIFpPTkVfTk9STUFMKSB7XG5tbS92bXNjYW4uYzo2NTgxOlx0XHRpZiAoIXpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgXHUwMDI2XHUwMDI2IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKSlcbm1tL3Ztc2Nhbi5jLTY1ODItXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3ltYm9scyBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgZWZmZWN0aXZlIGtlcm5lbCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZywgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgcmVjbGFpbS4gVGhlIGd1aWRlbGluZXMgZm9yIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGFuZCBpbnN0ZWFkLCBwaW5wb2ludCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFdlJiMzOTtyZSBsb29raW5nIHRvIGF2b2lkIHRoZSBub2lzZSBhbmQgY29uY2VudHJhdGUgb3VyIGVmZm9ydHMuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHM6IGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGdldF9zY2FuX2NvdW50YCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLCBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIGBscnVfZ2VuX2FnZV9ub2RlYCwgYW5kIGBscnVfZ2VuX3Nocmlua19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBob25lIGluIG9uIHRob3NlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBzaW5jZSB0aGF04oCZcyB3aGVyZSB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgc2hvdWxkIGJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGFjY2lkZW50YWxseSBncmFiYmluZyBmdW5jdGlvbnMgdGhhdCBhcmUgKnRvbyogY29tbW9uLgoKTm93LCBJJiMzOTttIGNoZWNraW5nIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgYXBwZWFycyB0byBiZSBhIGNsZWFyIGVudHJ5IHBvaW50IGludG8gem9uZSByZWNsYWltIGxvZ2ljLiBUaGVuIHRoZXJlJiMzOTtzIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYW5kIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAsIHdoaWNoIGFyZSBzdGF0aWMgYnV0IG1heSBiZSBsYXJnZS4gVGhpcyB3aWxsIGJlYXIgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIGFsc28gbm90ZWQgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGFuZCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLCB3aGljaCBhcmUgc3RhdGljIGlubGluZSwgYW5kIHRodXMsIG1pZ2h0IG5vdCBiZSBkaXJlY3RseSB0YXJnZXRhYmxlLCBidXQgYXJlIGRlZmluaXRlbHkgcmVsYXRlZCB0byBhbm9ueW1vdXMgcGFnZSByZWNsYWltLiBJIGFsc28gcmVtZW1iZXIgYGdldF9scnV2ZWNgIGFuZCB3YW50IHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuCgpJIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGxpa2UgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19TV0FQYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBob3cgdGhvc2UgY29uZmlncyBtaWdodCBpbmZsdWVuY2Ugd2hpY2ggY29kZSBwYXRocyBhcmUgYWN0aXZlLiBJIHdpbGwgc2VhcmNoIGZvciB0aGVzZSBzeW1ib2xzIGluIHRoZSBjb25maWdzLgoKSW4gc2hvcnQsIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZm9jdXNlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBsaWtlbHkgdGFyZ2V0aW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgbGFyZ2VyIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aG9zZSB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gdGhyb3VnaCBzb21lIG5vbi11YmlxdWl0b3VzIGVudHJ5LXBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbnJfc3dhcF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9NDMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfdXNhZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHN3YXApXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTQ0MS1cdFx0aWYgKHN3YXApXG5tbS9tZW1jb250cm9sLXYxLmM6NDQyOlx0XHRcdHZhbCAmIzQzOz0gdG90YWxfc3dhcF9wYWdlcyAtIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5tbS9tZW1jb250cm9sLXYxLmMtNDQzLVx0fSBlbHNlIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIwOT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjUzLVx0ICogbmVlZCBlYXJsaWVyIGFjY2VzcywgYW5kIHRoZSB3b3JraW5nc2V0IGNvZGUgcmVsaWVzIG9uIHRoZVxubW0vbWVtY29udHJvbC5jOjQyNTQ6XHQgKiBjZ3JvdXAgdHJlZSBsaW5rYWdlIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKCkpLiBTb1xubW0vbWVtY29udHJvbC5jLTQyNTUtXHQgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjMyPXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY1MC1cbm1tL21lbWNvbnRyb2wuYzo1NjUxOmxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNTY1Mi17XG5tbS9tZW1jb250cm9sLmM6NTY1MzpcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5tbS9tZW1jb250cm9sLmMtNTY1NC1cbi0tXG5tbS9zd2FwX3N0YXRlLmM9Njg9dm9pZCBzaG93X3N3YXBfY2FjaGVfaW5mbyh2b2lkKVxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MC1cdHByaW50ayhcJiMzNDslbHUgcGFnZXMgaW4gc3dhcCBjYWNoZVxcblwmIzM0OywgdG90YWxfc3dhcGNhY2hlX3BhZ2VzKCkpO1xubW0vc3dhcF9zdGF0ZS5jOjcxOlx0cHJpbnRrKFwmIzM0O0ZyZWUgc3dhcCAgPSAlbGRrQlxcblwmIzM0OywgSyhnZXRfbnJfc3dhcF9wYWdlcygpKSk7XG5tbS9zd2FwX3N0YXRlLmMtNzItXHRwcmludGsoXCYjMzQ7VG90YWwgc3dhcCA9ICVsdWtCXFxuXCYjMzQ7LCBLKHRvdGFsX3N3YXBfcGFnZXMpKTtcbi0tXG5tbS92bXNjYW4uYz0zNzg9c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4Ni1cdFx0ICovXG5tbS92bXNjYW4uYzozODc6XHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMzg4LVx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbi0tXG5tbS92bXNjYW4uYy0zOTEtXHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbm1tL3Ztc2Nhbi5jOjM5MjpcdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMzkzLVx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbi0tXG5tbS92bXNjYW4uYz0yNzE1PXN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNzIzLVx0aWYgKCFjYW5fZGVtb3RlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjLCBtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYzoyNzI0Olx0ICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzYyBNSU5fTFJVX0JBVENIKVxubW0vdm1zY2FuLmMtMjcyNS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTUyNS1cdH1cbm1tL3dvcmtpbmdzZXQuYzo1MjY6XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhldmljdGlvbl9tZW1jZykgXHUwMDNlIDApIHtcbm1tL3dvcmtpbmdzZXQuYy01MjctXHRcdHdvcmtpbmdzZXRfc2l6ZSAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGUoZXZpY3Rpb25fbHJ1dmVjLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU3dhcCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGdldF9ucl9zd2FwX3BhZ2VzYCBpcyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfU1dBUGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGNvcmUga2VybmVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIHdoZXRoZXIgdGhlIHN5c3RlbSBhY3R1YWxseSBoYXMgc3dhcCBlbmFibGVkLiBJZiBpdCBpc24mIzM5O3QsIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgdGhhdCBoYXMgbWUgd29uZGVyaW5nIGlmIGl0JiMzOTtzIHNhZmUgdG8gdXNlIGluIGNvbnRleHRzIHdoZXJlIHN3YXAgaXNuJiMzOTt0LiBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZGVwZW5kZW5jZSBvbiB0aGUgY29uZmlnIGZsYWcsIGlzIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlLCByaWdodCBub3chIEkmIzM5O2xsIGdvIGNoZWNrIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbnJfc3dhcF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTQyNT1zdGF0aWMgaW5saW5lIGJvb2wgdm1fc3dhcF9mdWxsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDI5LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDMwOnN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfbnJfc3dhcF9wYWdlcyh2b2lkKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDMxLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00ODM9c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDg2LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDg3OiNkZWZpbmUgZ2V0X25yX3N3YXBfcGFnZXMoKVx0XHRcdDBMXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00ODgtI2RlZmluZSB0b3RhbF9zd2FwX3BhZ2VzXHRcdFx0MExcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD01ODU9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTU5MS1cbmluY2x1ZGUvbGludXgvc3dhcC5oOjU5MjpleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01OTMtZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA0LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NjA1OnN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvc3dhcC5oLTYwNi17XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo2MDc6XHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTYwOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGBnZXRfbnJfc3dhcF9wYWdlc2AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgYGdldF9ucl9zd2FwX3BhZ2VzYCBpbiB0aGUga2VybmVsLiBNeSBiZXN0IHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgNDIwLTQ5MCwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgbGlrZWx5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGd1YXJkcyB3aWxsIGJlLiBUaGlzIHJhbmdlIHNob3VsZCBjb250YWluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpdHNlbGYgYW5kIGFueSBgI2lmZGVmYCBvciBgI2lmYCBibG9ja3MgdGhhdCBjb250cm9sIHdoZXRoZXIgb3IgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byByZWxhdGUgdG8gc29tZSBzd2FwIGZlYXR1cmUgb3Igb3B0aW9uOyBmaW5kaW5nIHRoZSBndWFyZGluZyBtYWNybyB3aWxsIHRlbGwgbWUgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGUgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlIGluIHRoaXMgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdGV4dGVybiBhdG9taWNfbG9uZ190IG5yX3N3YXBfcGFnZXM7XG4gNDIxOlx0ZXh0ZXJuIGxvbmcgdG90YWxfc3dhcF9wYWdlcztcbiA0MjI6XHRleHRlcm4gYXRvbWljX3QgbnJfcm90YXRlX3N3YXA7XG4gNDIzOlx0XG4gNDI0Olx0LyogU3dhcCA1MCUgZnVsbD8gUmVsZWFzZSBzd2FwY2FjaGUgbW9yZSBhZ2dyZXNzaXZlbHkuLiAqL1xuIDQyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9zd2FwX2Z1bGwodm9pZClcbiA0MjY6XHR7XG4gNDI3Olx0XHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZucl9zd2FwX3BhZ2VzKSAqIDIgXHUwMDNjIHRvdGFsX3N3YXBfcGFnZXM7XG4gNDI4Olx0fVxuIDQyOTpcdFxuIDQzMDpcdHN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfbnJfc3dhcF9wYWdlcyh2b2lkKVxuIDQzMTpcdHtcbiA0MzI6XHRcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5yX3N3YXBfcGFnZXMpO1xuIDQzMzpcdH1cbiA0MzQ6XHRcbiA0MzU6XHRleHRlcm4gdm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqKTtcbiA0MzY6XHRleHRlcm4gaW50IHBpbl9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpO1xuIDQzNzpcdGV4dGVybiB2b2lkIHVucGluX2hpYmVybmF0aW9uX3N3YXBfdHlwZShpbnQgdHlwZSk7XG4gNDM4Olx0ZXh0ZXJuIGludCBmaW5kX2hpYmVybmF0aW9uX3N3YXBfdHlwZShkZXZfdCBkZXZpY2UsIHNlY3Rvcl90IG9mZnNldCk7XG4gNDM5Olx0aW50IGZpbmRfZmlyc3Rfc3dhcChkZXZfdCAqZGV2aWNlKTtcbiA0NDA6XHRleHRlcm4gdW5zaWduZWQgaW50IGNvdW50X3N3YXBfcGFnZXMoaW50LCBpbnQpO1xuIDQ0MTpcdGV4dGVybiBzZWN0b3JfdCBzd2FwZGV2X2Jsb2NrKGludCwgcGdvZmZfdCk7XG4gNDQyOlx0ZXh0ZXJuIGludCBfX3N3YXBfY291bnQoc3dwX2VudHJ5X3QgZW50cnkpO1xuIDQ0MzpcdGV4dGVybiBib29sIHN3YXBfZW50cnlfc3dhcHBlZChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NDQ6XHRleHRlcm4gaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpO1xuIDQ0NTpcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvO1xuIDQ0NjpcdGV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NDc6XHRzZWN0b3JfdCBzd2FwX2ZvbGlvX3NlY3RvcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiA0NDg6XHRcbiA0NDk6XHQvKlxuIDQ1MDpcdCAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHN3YXAgc2xvdCByZWZlcmVuY2UgKHN3YXAgZW50cnkpIGFuZCB0aGUgY2FsbGVyXG4gNDUxOlx0ICogZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGlzIG5vIHJhY2UgbW9kaWZpY2F0aW9uIG9mIGl0IChlLmcuLCBQVExcbiA0NTI6XHQgKiBwcm90ZWN0aW5nIHRoZSBzd2FwIGVudHJ5IGluIHBhZ2UgdGFibGU7IHNobWVtJiMzOTtzIGNtcHhjaGcgcHJvdGVjdHMgdFxuIDQ1MzpcdCAqIGhlIHN3YXAgZW50cnkgaW4gc2htZW0gbWFwcGluZyksIHRoZXNlIHR3byBoZWxwZXJzIGJlbG93IGNhbiBiZSB1c2VkXG4gNDU0Olx0ICogdG8gcHV0L2R1cCB0aGUgZW50cmllcyBkaXJlY3RseS5cbiA0NTU6XHQgKlxuIDQ1NjpcdCAqIEFsbCBlbnRyaWVzIG11c3QgYmUgYWxsb2NhdGVkIGJ5IGZvbGlvX2FsbG9jX3N3YXAoKS4gQW5kIHRoZXkgbXVzdCBoYXZlXG4gNDU3Olx0ICogYSBzd2FwIGNvdW50IFx1MDAzZSAxLiBTZWUgY29tbWVudHMgb2YgZm9saW9fKl9zd2FwIGhlbHBlcnMgZm9yIG1vcmUgaW5mby5cbiA0NTg6XHQgKi9cbiA0NTk6XHRpbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NjA6XHR2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xuIDQ2MTpcdFxuIDQ2MjpcdC8qXG4gNDYzOlx0ICogZm9saW9fZnJlZV9zd2FwIHRyaWVzIHRvIGZyZWUgdGhlIHN3YXAgZW50cmllcyBwaW5uZWQgYnkgYSBzd2FwIGNhY2hlXG4gNDY0Olx0ICogZm9saW8sIGl0IGhhcyB0byBiZSBoZXJlIHRvIGJlIGNhbGxlZCBieSBvdGhlciBjb21wb25lbnRzLlxuIDQ2NTpcdCAqL1xuIDQ2NjpcdGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDQ2NzpcdFxuIDQ2ODpcdC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXG4gNDY5Olx0c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbiA0NzA6XHR2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NzE6XHRcbiA0NzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbiA0NzM6XHR7XG4gNDc0Olx0XHRwZXJjcHVfcmVmX3B1dChcdTAwMjZzaS1cdTAwM2V1c2Vycyk7XG4gNDc1Olx0fVxuIDQ3NjpcdFxuIDQ3NzpcdCNlbHNlIC8qIENPTkZJR19TV0FQICovXG4gNDc4Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIDQ3OTpcdHtcbiA0ODA6XHRcdHJldHVybiBOVUxMO1xuIDQ4MTpcdH1cbiA0ODI6XHRcbiA0ODM6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbiA0ODQ6XHR7XG4gNDg1Olx0fVxuIDQ4NjpcdFxuIDQ4NzpcdCNkZWZpbmUgZ2V0X25yX3N3YXBfcGFnZXMoKVx0XHRcdDBMXG4gNDg4Olx0I2RlZmluZSB0b3RhbF9zd2FwX3BhZ2VzXHRcdFx0MExcbiA0ODk6XHQjZGVmaW5lIHRvdGFsX3N3YXBjYWNoZV9wYWdlcygpXHRcdFx0MFVMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTg4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUuIElmIGBDT05GSUdfU1dBUGAgaXNuJiMzOTt0IHR1cm5lZCBvbiwgdGhlbiBgZ2V0X25yX3N3YXBfcGFnZXMoKWAgaXMgZ29pbmcgdG8gcmV0dXJuIDAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvbmRpdGlvbiBgZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDBgIGlzIGF1dG9tYXRpY2FsbHkgZmFsc2UuIFRoYXQgbWVhbnMgd2UgZG9uJiMzOTt0IGV2ZW4gaGF2ZSB0byB3b3JyeSBhYm91dCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGJlaW5nIGV2YWx1YXRlZCBpbiBlaXRoZXIgdGhlIHN0YW5kYXJkIG9yIG1lbWNnIHNjZW5hcmlvcywgaXQganVzdCBnZXRzIHNraXBwZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKUGx1cywgSSBzZWUgdGhhdCB0aGlzIG5ldyBoZWxwZXIsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGlzIGxvb2tpbmcgYXQgYE5SX1NXQVBDQUNIRWAgYW5kIHRoZW4gY2FsY3VsYXRpbmcgYW5vbiBwYWdlcyByZWxhdGl2ZSB0byB0aGUgc3dhcGNhY2hlLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBwcmVzc3VyZSBjYWxjdWxhdGlvbnMgaGVyZS4KClNvLCB0aGUgd2hvbGUgdGhpbmcgcmVhbGx5IGhpbmdlcyBvbiBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01FTUNHYC4gR290dGEgY29uZmlybSB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgc2V0IGFwcHJvcHJpYXRlbHkuIExldCBtZSB0cmFjayBkb3duIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBJIHJlbWVtYmVyIHNlZWluZyB0aGVtIGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIHNvIGxldCBtZSBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkuIFJpZ2h0LCBgU1dBUGAgYW5kIGBNRU1DR2AgYXJlIGJvdGggaW4gYGluaXQvS2NvbmZpZ2AuIFRpbWUgdG8gY2hlY2sgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgaW5zdGluY3QsIHdoZW4gbmVlZGluZyB0byBmaWd1cmUgb3V0IGhvdyBzd2FwcGluZyBvciBtZW1vcnkgY2dyb3VwIGZlYXR1cmVzIGFyZSBlbmFibGVkIGluIHRoaXMga2VybmVsLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIG9wdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scyBkZWZpbmVkIHRoZXJlLCBtYXliZSBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1NXQVBgIG9yIGBDT05GSUdfTUVNQ0dgLCBvciBwZXJoYXBzIGV2ZW4gbW9yZSBncmFudWxhciBvcHRpb25zIGRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgZmVhdHVyZSYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8sIHVuZGVyc3RhbmQgaG93IHRoZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gRnJvbSB0aGVyZSBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQfGNvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIE1FTUNHIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgaW5pdC9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIG9wdGlvbnMgZm9yIGEgbG90IG9mIGNvcmUga2VybmVsIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCBhbmQgTUVNQ0cgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGV5JiMzOTtkIGJlIGRlY2xhcmVkIHRoZXJlLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byB0aGVpciBkZWZhdWx0IGVuYWJsaW5nLiBIb3BlZnVsbHksIGl0JiMzOTtzIGNsZWFybHkgbGFpZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IHRyZWUgdGhlcmUgYWZmZWN0cyBteSBjdXJyZW50IHByb2JsZW0uIEdvdHRhIG1ha2Ugc3VyZSBJIGFsc28gbG9vayBmb3IgcG90ZW50aWFsIGZlYXR1cmUgZmxhZyBndWFyZHMgaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3NS1cbmluaXQvS2NvbmZpZzoxMDc2OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTEtXG5pbml0L0tjb25maWc6MTA5Mjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk4LVxuaW5pdC9LY29uZmlnOjEwOTk6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU1dBUCBhbmQgTUVNQ0cgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYFNXQVBgIGFuZCBgTUVNQ0dgIGFyZSBjb25maWd1cmVkIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGRlZXBlciBhbmQgZW5zdXJlIEkmIzM5O20gYXdhcmUgb2YgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHJlYWRpbmcgYXJvdW5kIGBTV0FQYCBlbnRyaWVzIGluIGBtbS9LY29uZmlnYCBhbmQsIHNpbWlsYXJseSwgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbnMgaW4gYGluaXQvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhvc2Uga2V5d29yZHMsIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaW50ZXJhY3Qgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtNZW1vcnkgTWFuYWdlbWVudCBvcHRpb25zXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0I1xuICAgNjpcdCMgRm9yIHNvbWUgcmVhc29uIG1pY3JvYmxhemUgYW5kIG5pb3MyIGhhcmQgY29kZSBTV0FQPW4uICBIb3BlZnVsbHkgd2UgY2FuXG4gICA3Olx0IyBhZGQgcHJvcGVyIFNXQVAgc3VwcG9ydCB0byB0aGVtLCBpbiB3aGljaCBjYXNlIHRoaXMgY2FuIGJlIHJlbW92ZS5cbiAgIDg6XHQjXG4gICA5Olx0Y29uZmlnIEFSQ0hfTk9fU1dBUFxuICAxMDpcdFx0Ym9vbFxuICAxMTpcdFxuICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoZSB3ZWVkcyBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4mIzM0OyBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhhdCBnZW5lcmFsIGFyZWEgYXJvdW5kIGxpbmUgMTA3Ni4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgdGhlIGJlaGF2aW9yIHdlJiMzOTtyZSBzZWVpbmcuIFRoaXMgdXN1YWxseSBjb250YWlucyB0aGUgYmFzaWMgZmVhdHVyZXMgb2YgYSBrZXJuZWwsIHNvIEkmIzM5O20gaG9waW5nIHRvIGlkZW50aWZ5IHdoYXQgZmVhdHVyZXMgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3Igd2hhdCBoYXMgcmVjZW50bHkgYmVlbiBtb2RpZmllZCB0byBjYXVzZSB0aGUgY3VycmVudCBpc3N1ZS4gSG9wZWZ1bGx5IHRoYXQgbGluZSB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHByb2JsZW0gYXQgaGFuZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA3MTpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwNzI6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwNzM6XHRcbjEwNzQ6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NTpcdFxuMTA3NjpcdGNvbmZpZyBNRU1DR1xuMTA3NzpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA3ODpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA3OTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODA6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODE6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4MjpcdFx0aGVscFxuMTA4MzpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODY6XHRcdGJvb2xcbjEwODc6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwODg6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwODk6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkwOlx0XHRkZWZhdWx0IHlcbjEwOTE6XHRcbjEwOTI6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTM6XHRcdGJvb2xcbjEwOTQ6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTU6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTY6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTc6XHRcdGRlZmF1bHQgeVxuMTA5ODpcdFxuMTA5OTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMDpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAxOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTAyOlx0XHRkZWZhdWx0IG5cbjExMDM6XHRcdGhlbHBcbjExMDQ6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA1Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA2Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwNzpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMDg6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODA2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBkaWZmIHNob3dzIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBsb29rcyBsaWtlIGBnZXRfbHJ1dmVjYCBoYXMgYmVlbiBtb3ZlZCBhbmQgYSBuZXcgZnVuY3Rpb24sIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGhhcyBiZWVuIGludHJvZHVjZWQuIFRoZSBsYXR0ZXIgYXBwZWFycyB0byBiZSB1c2VkIHdpdGhpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBpcyBkb2luZy4KCkFscmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlIGZvciBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLiBIbW0sIGl0JiMzOTtzIGNhbGN1bGF0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGFub255bW91cyBwYWdlcyBhbmQgc3dhcCBjYWNoZSBwYWdlcywgbGlrZWx5IHRvIGRldGVybWluZSBpZiB3ZSYjMzk7cmUgaW4gYSBsb3ctbWVtb3J5IHNpdHVhdGlvbi4gVGhlIGNvcmUgbG9naWMgaGluZ2VzIG9uIGNvbXBhcmluZyBgc3dhcGNhY2hlYCB0byBhIGZyYWN0aW9uIG9mIGBhbm9uX3BhZ2VzYCBhbmQgYFNXQVBfQ0xVU1RFUl9NQVhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSBhbHdheXMgZGlnIGRlZXBlci4KCk5vdywgYSBjcml0aWNhbCBwb2ludDogaG93IGlzIGBscnV2ZWNgIG9idGFpbmVkPyBBaCwgYGdldF9scnV2ZWNgIGlzIHVzZWQuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvZGUgdXNlcyBgbWVtY2dgIHRvIHNlbGVjdCB0aGUgcmlnaHQgTFJVIHZlY3Rvci4gVGhlcmUmIzM5O3MgYSBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2ssIHdoaWNoIGlzIGV4cGVjdGVkLiBCdXQgSSBzZWUgdGhpcyBgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO2AuIE15IFNwaWRleSBzZW5zZSBpcyB0aW5nbGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBXaGF0IGhhcHBlbnMgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgKmJ1dCogYG1lbWNnYCBpcyBgTlVMTGAsIGFuZCBgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZT8KCldoZW4gdGhlIHN5c3RlbSBydW5zIGdsb2JhbCByZWNsYWltIOKAkyB0aGluayBrc3dhcGQgb3IgZGlyZWN0IHJlY2xhaW0gZm9yIHRoZSB3aG9sZSBtZW1vcnkg4oCTIGBtZW1jZ2AgKndpbGwqIGJlIGBOVUxMYC4gVGhpcyB0cmlnZ2VycyB0aGUgYFZNX1dBUk5fT05fT05DRWAhIEFuZCwgaWYgbWVtb3J5IGNncm91cHMgYXJlIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkICh3aGljaCBpcyB0aGUgZGVmYXVsdCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIG9uIGFuZCBgY2dyb3VwX2Rpc2FibGU9bWVtb3J5YCBpcyBub3QgdXNlZCBhdCBib290KSwgYCFtZW1fY2dyb3VwX2Rpc2FibGVkKClgIHdpbGwgKmFsd2F5cyogYmUgdHJ1ZS4KClNvLCB0aGUgd2FybmluZyB3aWxsIGZpcmUgZHVyaW5nIGdsb2JhbCByZWNsYWltLCB3aGljaCBpcyBhIG1ham9yIHJlZCBmbGFnISBQcmV2aW91c2x5LCBgZ2V0X2xydXZlY2Agd2FzIG9ubHkgY2FsbGVkIGluIGNvbnRleHRzIHdoZXJlIGBtZW1jZ2Agd2FzIHByb3Blcmx5IGhhbmRsZWQgb3IgY2hlY2tlZCwgbGlrZSBpbiBtdWx0aS1nZW4gTFJVLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgZ2V0X2xydXZlY2Agd2FzICpwcmV2aW91c2x5KiBjYWxsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuIFRoaXMgbG9va3MgbGlrZSBhIHJlZ3Jlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0zMjI9c3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0zNDEtXG5tbS92bXNjYW4uYzozNDI6c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtMzQzLXtcbi0tXG5tbS92bXNjYW4uYz0zNjI9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0zNjQte1xubW0vdm1zY2FuLmM6MzY1Olx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTM2Ni1cdHVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlO1xuLS1cbm1tL3Ztc2Nhbi5jPTIzMjE9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjMyMy1cdHVuc2lnbmVkIGxvbmcgZmlsZTtcbm1tL3Ztc2Nhbi5jOjIzMjQ6XHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xubW0vdm1zY2FuLmMtMjMyNS1cbi0tXG5tbS92bXNjYW4uYy0yMzI4LVxubW0vdm1zY2FuLmM6MjMyOTpcdHRhcmdldF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgcGdkYXQpO1xubW0vdm1zY2FuLmMtMjMzMC1cbi0tXG5tbS92bXNjYW4uYy0yMzQwLVx0ICovXG5tbS92bXNjYW4uYzoyMzQxOlx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbm1tL3Ztc2Nhbi5jOjIzNDI6XHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbm1tL3Ztc2Nhbi5jOjIzNDM6XHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbm1tL3Ztc2Nhbi5jOjIzNDQ6XHRzcGluX3VubG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG5tbS92bXNjYW4uYy0yMzQ1LVxuLS1cbm1tL3Ztc2Nhbi5jLTIzNTctXHRcdCAqL1xubW0vdm1zY2FuLmM6MjM1ODpcdFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxubW0vdm1zY2FuLmMtMjM1OS1cdFx0XHRcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTik7XG5tbS92bXNjYW4uYzoyMzYwOlx0XHRpZiAocmVmYXVsdHMgIT0gdGFyZ2V0X2xydXZlYy1cdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0FOT05dIHx8XG5tbS92bXNjYW4uYzoyMzYxOlx0XHRcdGluYWN0aXZlX2lzX2xvdyh0YXJnZXRfbHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG5tbS92bXNjYW4uYy0yMzYyLVx0XHRcdHNjLVx1MDAzZW1heV9kZWFjdGl2YXRlIHw9IERFQUNUSVZBVEVfQU5PTjtcbi0tXG5tbS92bXNjYW4uYy0yMzY1LVxubW0vdm1zY2FuLmM6MjM2NjpcdFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxubW0vdm1zY2FuLmMtMjM2Ny1cdFx0XHRcdFdPUktJTkdTRVRfQUNUSVZBVEVfRklMRSk7XG5tbS92bXNjYW4uYzoyMzY4Olx0XHRpZiAocmVmYXVsdHMgIT0gdGFyZ2V0X2xydXZlYy1cdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0ZJTEVdIHx8XG5tbS92bXNjYW4uYzoyMzY5Olx0XHQgICAgaW5hY3RpdmVfaXNfbG93KHRhcmdldF9scnV2ZWMsIExSVV9JTkFDVElWRV9GSUxFKSlcbm1tL3Ztc2Nhbi5jLTIzNzAtXHRcdFx0c2MtXHUwMDNlbWF5X2RlYWN0aXZhdGUgfD0gREVBQ1RJVkFURV9GSUxFO1xuLS1cbm1tL3Ztc2Nhbi5jLTIzODAtXHQgKi9cbm1tL3Ztc2Nhbi5jOjIzODE6XHRmaWxlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSk7XG5tbS92bXNjYW4uYy0yMzgyLVx0aWYgKGZpbGUgXHUwMDNlXHUwMDNlIHNjLVx1MDAzZXByaW9yaXR5IFx1MDAyNlx1MDAyNiAhKHNjLVx1MDAzZW1heV9kZWFjdGl2YXRlIFx1MDAyNiBERUFDVElWQVRFX0ZJTEUpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jPTI4ODk9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTAyLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG5tbS92bXNjYW4uYzoyOTAzOlx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtMjkwNC1cdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9MjkxNj12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MzItXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xubW0vdm1zY2FuLmM6MjkzMzpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTI5MzQtXHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQzNzI9dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNDM3OS1cdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xubW0vdm1zY2FuLmM6NDM4MDpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQzODEtXG4tLVxubW0vdm1zY2FuLmM9NDM5Nz12b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNDQwMS1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG5tbS92bXNjYW4uYzo0NDAyOlx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNDQwMy1cbi0tXG5tbS92bXNjYW4uYz00NDA4PXZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy00NDE0LVx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG5tbS92bXNjYW4uYzo0NDE1Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNDQxNi1cbi0tXG5tbS92bXNjYW4uYz00NDM0PXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQzNS17XG5tbS92bXNjYW4uYzo0NDM2Olx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ0MzctXG4tLVxubW0vdm1zY2FuLmM9NDQ0Mz1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQ0NC17XG5tbS92bXNjYW4uYzo0NDQ1Olx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ0NDYtXHRpbnQgdHlwZTtcbi0tXG5tbS92bXNjYW4uYz00NDkwPXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQ5MS17XG5tbS92bXNjYW4uYzo0NDkyOlx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ0OTMtXHRpbnQgdHlwZTtcbi0tXG5tbS92bXNjYW4uYz00NTYyPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU2OC1cbm1tL3Ztc2Nhbi5jOjQ1Njk6XHRjaGlsZF9scnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmM6NDU3MDpcdHBhcmVudF9scnV2ZWMgPSBnZXRfbHJ1dmVjKHBhcmVudCwgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ1NzEtXG4tLVxubW0vdm1zY2FuLmM9NTI4Mz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTMwOC1cdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbm1tL3Ztc2Nhbi5jOjUzMDk6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTUzMTAtXG4tLVxubW0vdm1zY2FuLmM9NTQyNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbi0tXG5tbS92bXNjYW4uYy01NDM5LVx0XHRcdGlmICghbnJfdG9fc2tpcC0tKVxubW0vdm1zY2FuLmM6NTQ0MDpcdFx0XHRcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNTQ0MS1cdFx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTU0NTY9c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5tbS92bXNjYW4uYy01NDcxLVxubW0vdm1zY2FuLmM6NTQ3MjpcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNTQ3My19XG4tLVxubW0vdm1zY2FuLmM9NTYzND1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTY1My1cdHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2c7XG5tbS92bXNjYW4uYzo1NjU0Olx0bHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTU2NTUtXG4tLVxubW0vdm1zY2FuLmM9NTgyOT12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNTgzNy1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG5tbS92bXNjYW4uYzo1ODM4Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNTgzOS1cdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9NjE2ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTY2LVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmM6NjE2NzpcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG5tbS92bXNjYW4uYy02MTY4LVx0Ym9vbCByZWNsYWltYWJsZSA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTYxNzgtXG5tbS92bXNjYW4uYzo2MTc5Olx0dGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCBwZ2RhdCk7XG5tbS92bXNjYW4uYy02MTgwLVxuLS1cbm1tL3Ztc2Nhbi5jLTYyNDMtXHRcdGlmIChjZ3JvdXBfcmVjbGFpbShzYykgXHUwMDI2XHUwMDI2IHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKVxubW0vdm1zY2FuLmM6NjI0NDpcdFx0XHRzZXRfYml0KExSVVZFQ19DR1JPVVBfQ09OR0VTVEVELCBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWZsYWdzKTtcbm1tL3Ztc2Nhbi5jLTYyNDUtXG5tbS92bXNjYW4uYy02MjQ2LVx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jOjYyNDc6XHRcdFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpO1xubW0vdm1zY2FuLmMtNjI0OC1cdH1cbi0tXG5tbS92bXNjYW4uYy02MjU3LVx0ICAgICFzYy1cdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NjI1ODpcdCAgICAodGVzdF9iaXQoTFJVVkVDX0NHUk9VUF9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpIHx8XG5tbS92bXNjYW4uYzo2MjU5Olx0ICAgICB0ZXN0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpKSlcbm1tL3Ztc2Nhbi5jLTYyNjAtXHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9DT05HRVNURUQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTY0NDE9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTY0NDIte1xubW0vdm1zY2FuLmM6NjQ0MzpcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG5tbS92bXNjYW4uYy02NDQ0LVx0dW5zaWduZWQgbG9uZyByZWZhdWx0cztcbi0tXG5tbS92bXNjYW4uYy02NDQ4LVxubW0vdm1zY2FuLmM6NjQ0OTpcdHRhcmdldF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyh0YXJnZXRfbWVtY2csIHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjY0NTA6XHRyZWZhdWx0cyA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTik7XG5tbS92bXNjYW4uYzo2NDUxOlx0dGFyZ2V0X2xydXZlYy1cdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0FOT05dID0gcmVmYXVsdHM7XG5tbS92bXNjYW4uYzo2NDUyOlx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NjQ1MzpcdHRhcmdldF9scnV2ZWMtXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9GSUxFXSA9IHJlZmF1bHRzO1xubW0vdm1zY2FuLmMtNjQ1NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDc1CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDEzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IFJlY2xhaW0gTG9naWMgTW9kaWZpY2F0aW9uKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIGNvZGUgY2hhbmdlIGFzIEkgc2VlIGl0LiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBzaXR1YXRpb24gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O3ZlIHNwb3R0ZWQgYSBtb2RpZmljYXRpb24gdG8gdGhlIGFub255bW91cyBwYWdlIHJlY2xhaW0gbG9naWMgd2l0aGluIGBtbS92bXNjYW4uY2AuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgY2FsbCB0byBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYW5kIGEgbW92ZSBjb25jZXJuaW5nIGBnZXRfbHJ1dmVjKClgLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIHdlJiMzOTtyZSAqbm90KiBkZWFsaW5nIHdpdGggbWVtY2dzICh3aGljaCBpcyB0aGUgc3RhbmRhcmQsIGRlZmF1bHQgc2V0dXApLCBhbmQgYENPTkZJR19NRU1DR2AgaXMgKmVuYWJsZWQqIOKAkyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIOKAkyBjYWxsaW5nIGBnZXRfbHJ1dmVjKE5VTEwsIG5pZClgIHRyaWdnZXJzIGEgYFZNX1dBUk5fT05fT05DRWAgYXNzZXJ0aW9uLCB3aGljaCBpcyBhIGtlcm5lbCB3YXJuaW5nLiBUaGlzIGlzIGhhcHBlbmluZyBiZWNhdXNlIG9mIGEgY2hlY2sgcmVsYXRlZCB0byBtZW1jZyBub3QgYmVpbmcgZGlzYWJsZWQgd2hlbiBgbWVtY2dgIGlzIG51bGwuIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIG5vbi1tZW1jZyByZWNsYWltIHBhdGggaGFzIGJlZW4gYWx0ZXJlZC4gRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIGEgY2hhbmdlIGluIGhvdyB0aGUgTFJVIHNjYW5uaW5nIGlzIGJhbGFuY2VkIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIHBhZ2VzIHVuZGVyIHN3YXAgcHJlc3N1cmUuIFRoZSBsb2dpYyBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gaG93IHdlIGRlY2lkZSB0byByZWNsYWltIGFub24gcGFnZXMsIGVzcGVjaWFsbHkgd2hlbiBzd2FwIGlzIHByZXNlbnQuIEl0IGNvdWxkIGFmZmVjdCB0aGUgYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgcGFnZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgoKV2UgaGF2ZSBhIGNsZWFyIHBhdGggdGhhdCBsZWFkcyB0byB0aGlzIGFzc2VydGlvbiBvciBhbHRlcmVkIGJlaGF2aW9yIGFuZCBhZmZlY3RzIHJlY2xhaW0vc2Nhbm5pbmcuIFNvLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgdGhpcyBwYXRoLgoKRm9yIEZvY3VzU3ltYm9scywgaGVyZSYjMzk7cyB3aGF0IHN0YW5kcyBvdXQ6IGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCwgYGdldF9scnV2ZWNgLCBgZ2V0X3NjYW5fY291bnRgLCBgem9uZV9yZWNsYWltYWJsZV9wYWdlc2AsIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBMUlUgc2Nhbm5pbmcgYW5kIGFub24gcGFnZSByZWNsYW1hdGlvbi4gVGhleSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgaW50byB0aGUgbW9kaWZpZWQgbG9naWMuCgpBbmQsIG9mIGNvdXJzZSwgZm9yIGVuYWJsaW5nIGNvbmZpZ3MsIHdlJiMzOTtsbCBuZWVkIGBTV0FQYCBiZWNhdXNlIG9mIHRoZSBgZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDBgIGNoZWNrIGFuZCBzd2FwIGNhY2hlIGxvZ2ljLCBhbmQgYE1FTUNHYCBiZWNhdXNlIGl0JiMzOTtzIHJlcXVpcmVkIGZvciB0aGUgYXNzZXJ0aW9uIHRoYXQgb2NjdXJzIHdoZW4gYGdldF9scnV2ZWNgIGlzIGNhbGxlZCB3aXRoIGEgTlVMTCBtZW1jZyBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGFuZCBhbHNvIGZvciB0aGUgY2FsbCBwYXRoIGluIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVjbGFpbWFibGVfYW5vbl9pc19sb3cmIzM0OywKICAgICYjMzQ7Y2FuX3JlY2xhaW1fYW5vbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtnZXRfbHJ1dmVjJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O3pvbmVfcmVjbGFpbWFibGVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIGludG8gY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIHRvIGdhdGUgYW5vbiBwYWdlIHNjYW5uaW5nIGJhc2VkIG9uIHN3YXBjYWNoZSBsZXZlbHMuIEFkZGl0aW9uYWxseSwgY2FsbGluZyBnZXRfbHJ1dmVjKCkgd2l0aCBhIE5VTEwgbWVtY2cgaW4gbm9uLW1lbWNnIHJlY2xhaW0gcGF0aHMgdW5kZXIgQ09ORklHX01FTUNHIGV4ZWN1dGVzIFZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSwgaW50cm9kdWNpbmcgcG90ZW50aWFsIGFzc2VydGlvbiB0cmlnZ2VycyBhbmQgYWx0ZXJpbmcgc2NhbiBiYWxhbmNlIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY2xhaW1hYmxlX2Fub25faXNfbG93JiMzNDssCiAgICAmIzM0O2Nhbl9yZWNsYWltX2Fub25fcGFnZXMmIzM0OywKICAgICYjMzQ7Z2V0X2xydXZlYyYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDt6b25lX3JlY2xhaW1hYmxlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19scnV2ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGFub255bW91cyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSBpbnRvIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSB0byBnYXRlIGFub24gcGFnZSBzY2FubmluZyBiYXNlZCBvbiBzd2FwY2FjaGUgbGV2ZWxzLiBBZGRpdGlvbmFsbHksIGNhbGxpbmcgZ2V0X2xydXZlYygpIHdpdGggYSBOVUxMIG1lbWNnIGluIG5vbi1tZW1jZyByZWNsYWltIHBhdGhzIHVuZGVyIENPTkZJR19NRU1DRyBleGVjdXRlcyBWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSksIGludHJvZHVjaW5nIHBvdGVudGlhbCBhc3NlcnRpb24gdHJpZ2dlcnMgYW5kIGFsdGVyaW5nIHNjYW4gYmFsYW5jZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9uIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHRoZSBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgaGVscGVyIGFuZCBpbnZva2luZyBpdCBmcm9tIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLiBUbyBzdXBwb3J0IHRoaXMsIGBnZXRfbHJ1dmVjKClgIGlzIHJlbG9jYXRlZCBlYXJsaWVyIGluIHRoZSBmaWxlLlxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgc3RydWN0IGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA1OjExOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1NjcwOGQxZDJkZmQ1Li4xOTJiZDA5ODAxMjE3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMzM5LDYgJiM0MzszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAlyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzOwlpZiAobWVtY2cpIHsKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9ICZhbXA7bWVtY2ctJmd0O25vZGVpbmZvW25pZF0tJmd0O2xydXZlYzsKJiM0MzsKJiM0MzsJCS8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovCiYjNDM7CQlpZiAoIWxydXZlYy0mZ3Q7cGdkYXQpCiYjNDM7CQkJbHJ1dmVjLSZndDtwZ2RhdCA9IHBnZGF0OwomIzQzOwomIzQzOwkJcmV0dXJuIGxydXZlYzsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwlWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3BnZGF0LSZndDtfX2xydXZlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCWludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7CiYjNDM7CiYjNDM7CWlmICghc2MgfHwgKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7CiYjNDM7CQkgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pOwomIzQzOwlzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7CiYjNDM7CiYjNDM7CXJldHVybiBzd2FwY2FjaGUgJmx0OyBtaW4oYW5vbl9wYWdlcyAmZ3Q7Jmd0OyA2LCBTV0FQX0NMVVNURVJfTUFYKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKQEAgLTM0OCwxMSAmIzQzOzM4NCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCSAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUKIAkJICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlPwogCQkgKi8KLQkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwKQomIzQzOwkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKIAkJLyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqLwotCQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwKQomIzQzOwkJaWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpICZndDsgMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSkKIAkJCXJldHVybiB0cnVlOwogCX0KIApAQCAtMjY3NCwyNiAmIzQzOzI3MTIsNiBAQCBzdGF0aWMgYm9vbCBzaG91bGRfY2xlYXJfcG1kX3lvdW5nKHZvaWQpCiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKQkoKHNlcSkgJSBNRU1DR19OUl9HRU5TKQogI2RlZmluZSBnZXRfbWVtY2dfYmluKGJpbikJKChiaW4pICUgTUVNQ0dfTlJfQklOUykKIAotc3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKQotewotCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTsKLQotI2lmZGVmIENPTkZJR19NRU1DRwotCWlmIChtZW1jZykgewotCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSAmYW1wO21lbWNnLSZndDtub2RlaW5mb1tuaWRdLSZndDtscnV2ZWM7Ci0KLQkJLyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi8KLQkJaWYgKCFscnV2ZWMtJmd0O3BnZGF0KQotCQkJbHJ1dmVjLSZndDtwZ2RhdCA9IHBnZGF0OwotCi0JCXJldHVybiBscnV2ZWM7Ci0JfQotI2VuZGlmCi0JVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpOwotCi0JcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwotfQotCiBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHkgaW4gYG1tL3Ztc2Nhbi5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgbW0vdm1zY2FuLmNgIHRoYXQgbW92ZXMgYGdldF9scnV2ZWMoKWAgdXAgaW4gdGhlIGZpbGUgYW5kIGludHJvZHVjZXMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIFRoZSB0YXNrIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIEtNU0FOIG9yIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGZvciB0aGlzIGNvZGUgY2hhbmdlLiBHaXZlbiBteSBleHBlcnRpc2UsIHRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIC0gaXQmIzM5O3MgYSBjb2RlIHJldmlldywgc3BlY2lmaWNhbGx5IGV2YWx1YXRpbmcgbWVtb3J5IHNhZmV0eSBjb25jZXJucy4gVGhlIHNldmVyaXR5IGlzIGxvdywgYXMgaXQmIzM5O3MgYSBkZWZlbnNpdmUgcmV2aWV3LgoKRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZS4gYGdldF9scnV2ZWMoKWAgaXMgbW92ZWQgYW5kIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGJlY2F1c2UgaXQmIzM5O3MgbmV3LiAgSSBzZWUgdGhhdCBpdCB0YWtlcyBgbWVtY2dgLCBgbmlkYCwgYW5kIGEgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlIChgc2NgKSBhcyBpbnB1dC4gIEluc2lkZSwgaXQgZ2V0cyB0aGUgYGxydXZlY2AgYW5kIGNhbGN1bGF0ZXMgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYC4gSXQgcmV0dXJucyBhIGJvb2xlYW4gYmFzZWQgb24gYSBjb21wYXJpc29uIGJldHdlZW4gYHN3YXBjYWNoZWAgYW5kIGEgdmFsdWUgZGVyaXZlZCBmcm9tIGBhbm9uX3BhZ2VzYC4gVGhpcyBsb29rcyBsaWtlIHNvbWUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgaGV1cmlzdGljIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgdGhyb3R0bGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBiYXNlZCBvbiBzd2FwIGNhY2hlIGxldmVscyBhbmQgSU8gY29uc3RyYWludHMuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBUaGUgY29kZSBjaGVja3MgaWYgYHNjYCBpcyBOVUxMLiBgbHJ1dmVjYCBpcyBhc3NpZ25lZCB0aGUgcmV0dXJuIG9mIGBnZXRfbHJ1dmVjKClgLCB3aGljaCBsb29rcyBzYWZlLiAgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYCBhcmUgc2NhbGFyIHZhcmlhYmxlcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGNhbGxzIHRvIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYC4gVGhlIGNhbGN1bGF0aW9uIGlzIGEgcHVyZSBpbnRlZ2VyIGNhbGN1bGF0aW9uLiAgTm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBoZXJlLCBubyBkaXJlY3QgbWVtb3J5IGFjY2VzcyB0byB1c2VyLXNwYWNlLCBubyBzdHJ1Y3QgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQsIG5vIHBvdGVudGlhbCBmb3IgaW5mbyBsZWFrcyBvciBwYWRkaW5nIGxlYWtzIGZyb20gdGhlIGxvb2tzIG9mIGl0LiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHNjb3BlZC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIEtNU0FOIGZsYWdzIGF0IGFsbC4KClRvIGJlIGV4dHJhIHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBjYWxsZXJzIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LiBJJiMzOTtsbCBydW4gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLCBidXQgYmFzZWQgb24gdGhlIGNvZGUgaXRzZWxmLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhbmQgbG9jYWxpemVkIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTm8gS01TQU4gZmxhZ3Mgc2VlbSBhcHBsaWNhYmxlIGhlcmUuIEl0JiMzOTtzIGxpa2VseSBLQVNBTiBpcyBhbHJlYWR5IHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZSwgYW5kIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZSBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhbnkgb2YgdGhlIGlzc3VlcyBLTVNBTiBkZWFscyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdGlmIChzYyBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlbm9fZGVtb3Rpb24pXG4gMzMxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAzMzI6XHRcbiAzMzM6XHRcdG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ2RhdCwgXHUwMDI2YWxsb3dlZF9tYXNrKTtcbiAzMzQ6XHRcdGlmIChub2Rlc19lbXB0eShhbGxvd2VkX21hc2spKVxuIDMzNTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzM2Olx0XG4gMzM3Olx0XHQvKiBGaWx0ZXIgb3V0IG5vZGVzIHRoYXQgYXJlIG5vdCBpbiBjZ3JvdXAmIzM5O3MgbWVtc19hbGxvd2VkLiAqL1xuIDMzODpcdFx0bWVtX2Nncm91cF9ub2RlX2ZpbHRlcl9hbGxvd2VkKG1lbWNnLCBcdTAwMjZhbGxvd2VkX21hc2spO1xuIDMzOTpcdFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xuIDM0MDpcdH1cbiAzNDE6XHRcbiAzNDI6XHRzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4gMzQzOlx0e1xuIDM0NDpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuIDM0NTpcdFxuIDM0NjpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbiAzNDc6XHRcdGlmIChtZW1jZykge1xuIDM0ODpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbiAzNDk6XHRcbiAzNTA6XHRcdFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cbiAzNTE6XHRcdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4gMzUyOlx0XHRcdFx0bHJ1dmVjLVx1MDAzZXBnZGF0ID0gcGdkYXQ7XG4gMzUzOlx0XG4gMzU0Olx0XHRcdHJldHVybiBscnV2ZWM7XG4gMzU1Olx0XHR9XG4gMzU2Olx0I2VuZGlmXG4gMzU3Olx0XHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4gMzU4Olx0XG4gMzU5Olx0XHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gMzYwOlx0fVxuIDM2MTpcdFxuIDM2MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gMzYzOlx0XHRcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIDM2NDpcdHtcbiAzNjU6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG4gMzY2Olx0XHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbiAzNjc6XHRcbiAzNjg6XHRcdGlmICghc2MgfHwgKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gMzY5Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzNzA6XHRcbiAzNzE6XHRcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7XG4gMzcyOlx0XHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4gMzczOlx0XHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4gMzc0Olx0XG4gMzc1Olx0XHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4gMzc2Olx0fVxuIDM3NzpcdFxuIDM3ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAzNzk6XHRcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIDM4MDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIDM4MTpcdHtcbiAzODI6XHRcdGlmIChtZW1jZyA9PSBOVUxMKSB7XG4gMzgzOlx0XHRcdC8qXG4gMzg0Olx0XHRcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmVcbiAzODU6XHRcdFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xuIDM4NjpcdFx0XHQgKi9cbiAzODc6XHRcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gMzg4Olx0XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIDM4OTpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDM5MDpcdFx0fSBlbHNlIHtcbiAzOTE6XHRcdFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xuIDM5MjpcdFx0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gMzkzOlx0XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIDM5NDpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDM5NTpcdFx0fVxuIDM5NjpcdFxuIDM5NzpcdFx0LypcbiAzOTg6XHRcdCAqIFRoZSBwYWdlIGNhbiBub3QgYmUgc3dhcHBlZC5cbiAzOTk6XHRcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NzgKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIsIGFuZCBob25lc3RseSwgaXQmIzM5O3MgcHJldHR5IGNsZWFuIGFuZCBkaXJlY3QuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgbG9jYWxpemVkIGFuZCBzZW5zaWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IHJlYXJyYW5naW5nIHRoZSBgZ2V0X2xydXZlYygpYCBoZWxwZXIgd2l0aGluIGBtbS92bXNjYW4uY2AsIHdoaWNoIG1ha2VzIGl0IG1vcmUgYWNjZXNzaWJsZSwgd2hpY2ggaXMgZmluZS4gVGhlIHJlYWwgbWVhdCBvZiBpdCBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHRvIGNoZWNrIGlmIHRoZSBzd2FwY2FjaGUgaXMgbG93IHJlbGF0aXZlIHRvIGFub255bW91cyBwYWdlcywgYnV0IG9ubHkgaWYgd2UmIzM5O3JlICpub3QqIGRlYWxpbmcgd2l0aCBkaXJlY3QgSS9PLCBqdWRnaW5nIGJ5IHRoZSBgIShzYy0mZ3Q7Z2ZwX21hc2sgJmFtcDsgX19HRlBfSU8pYCBjaGVjay4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlbiB0aGUgcGF0Y2gganVzdCBjYWxscyB0aGlzIG5ldyBmdW5jdGlvbiB3aXRoaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuCgpDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gcmVkIGZsYWdzIGhlcmUsIG5vdGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uJiMzNDsgb3IgJiMzNDtkYXRhIGxlYWsmIzM0Oy4gTm8gbmV3IGFsbG9jYXRpb25zLCBub3RoaW5nIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGJlaW5nIHJlYWQgb3IgZXhwb3NlZC4gVGhlIHZhcmlhYmxlcyB3aXRoaW4gdGhlIG5ldyBmdW5jdGlvbiBhcmUgYWxsIGxvY2FsIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCB3aGljaCBpcyBleGNlbGxlbnQuIE5vIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmNlcm5zIG9yIGFueSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IGp1bXAgb3V0IGF0IG1lLgoKR2l2ZW4gdGhlIHNpbXBsaWNpdHkgYW5kIHRoZSBmb2N1c2VkIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgZm9yIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBjb25maWd1cmF0aW9ucyBzaG91bGQgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHZlcnkgdGFyZ2V0ZWQgY2hhbmdlcyB3aXRoIG1pbmltYWwgY29tcGxleGl0eSwgYW5kIHRoZSBleGlzdGluZyBjaGVja3MsIGNvbWJpbmVkIHdpdGggdGhlIGxhY2sgb2YgYW55IHNpZ25pZmljYW50IG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNlY3VyaXR5IGNvbmNlcm5zLCByZW5kZXJzIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9uIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHRoZSBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgaGVscGVyIGFuZCBpbnZva2luZyBpdCBmcm9tIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLiBUbyBzdXBwb3J0IHRoaXMsIGBnZXRfbHJ1dmVjKClgIGlzIHJlbG9jYXRlZCBlYXJsaWVyIGluIHRoZSBmaWxlLlxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgc3RydWN0IGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGFub255bW91cyBwYWdlIHJlY2xhaW0gZGVjaXNpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgdGhlIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBoZWxwZXIgYW5kIGludm9raW5nIGl0IGZyb20gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIFRvIHN1cHBvcnQgdGhpcywgYGdldF9scnV2ZWMoKWAgaXMgcmVsb2NhdGVkIGVhcmxpZXIgaW4gdGhlIGZpbGUuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYGFub25fcGFnZXNgLCBgc3dhcGNhY2hlYCwgYGxydXZlY2ApIGFyZSBpbW1lZGlhdGVseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBrZXJuZWwgc3RhdGUgZnVuY3Rpb25zIChgZ2V0X2xydXZlYygpYCBhbmQgYGxydXZlY19wYWdlX3N0YXRlKClgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvIG5vdCBtb2RpZnkgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLCBkbyBub3QgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgYWNyb3NzIGtlcm5lbC91c2VyIGJvdW5kYXJpZXMgKGUuZy4gdmlhIGNvcHlfdG9fdXNlciBvciBuZXRsaW5rKSwgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaW52YWxpZCBzdHJ1Y3QgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMTo1My43OTQxNjE3MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU5OTcyMDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfbHJ1dmVjXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbiBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGhlbHBlciBhbmQgaW52b2tpbmcgaXQgZnJvbSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVG8gc3VwcG9ydCB0aGlzLCBgZ2V0X2xydXZlYygpYCBpcyByZWxvY2F0ZWQgZWFybGllciBpbiB0aGUgZmlsZS5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG5cXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaW52YWxpZCBzdHJ1Y3QgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMTo1My43OTQxNjY3ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDA0MTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwNToxMTo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTMzOSw2ICszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4gXFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcbitcXG4rI2lmZGVmIENPTkZJR19NRU1DR1xcbitcXHRpZiAobWVtY2cpIHtcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXFx1MDAyNm1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VscnV2ZWM7XFxuK1xcbitcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqL1xcbitcXHRcXHRpZiAoIWxydXZlYy1cXHUwMDNlcGdkYXQpXFxuK1xcdFxcdFxcdGxydXZlYy1cXHUwMDNlcGdkYXQgPSBwZ2RhdDtcXG4rXFxuK1xcdFxcdHJldHVybiBscnV2ZWM7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdFZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4re1xcbitcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbitcXHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcXG4rXFxuK1xcdGlmICghc2MgfHwgKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0YW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgK1xcbitcXHRcXHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xcbitcXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XFxuK1xcbitcXHRyZXR1cm4gc3dhcGNhY2hlIFxcdTAwM2MgbWluKGFub25fcGFnZXMgXFx1MDAzZVxcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbkBAIC0zNDgsMTEgKzM4NCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmVcXG4gXFx0XFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXFx1MDAzZSAwKVxcbitcXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovXFxuLVxcdFxcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcXHUwMDNlIDApXFxuK1xcdFxcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0yNjc0LDI2ICsyNzEyLDYgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxcbiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKVxcdCgoc2VxKSAlIE1FTUNHX05SX0dFTlMpXFxuICNkZWZpbmUgZ2V0X21lbWNnX2JpbihiaW4pXFx0KChiaW4pICUgTUVNQ0dfTlJfQklOUylcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4te1xcbi1cXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XFxuLVxcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuLVxcdGlmIChtZW1jZykge1xcbi1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlYztcXG4tXFxuLVxcdFxcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXFxuLVxcdFxcdGlmICghbHJ1dmVjLVxcdTAwM2VwZ2RhdClcXG4tXFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2VwZ2RhdCA9IHBnZGF0O1xcbi1cXG4tXFx0XFx0cmV0dXJuIGxydXZlYztcXG4tXFx0fVxcbi0jZW5kaWZcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbi1cXG4tXFx0cmV0dXJuIFxcdTAwMjZwZ2RhdC1cXHUwMDNlX19scnV2ZWM7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTE6NTQuMjg4ODExODY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTU2OTgxMjU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfbHJ1dmVjXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjExOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTMzOSw2ICszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdHJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuK3tcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRpZiAobWVtY2cpIHtcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXHUwMDI2bWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWM7XG4rXG4rXHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXG4rXHRcdGlmICghbHJ1dmVjLVx1MDAzZXBnZGF0KVxuK1x0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuK1xuK1x0XHRyZXR1cm4gbHJ1dmVjO1xuK1x0fVxuKyNlbmRpZlxuK1x0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuK1x0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4rXG4rXHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4rXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4rXG4rXHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuQEAgLTM0OCwxMSArMzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxuIFx0XHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4gXHRcdCAqL1xuLVx0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMClcbitcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xuLVx0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDApXG4rXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG5AQCAtMjY3NCwyNiArMjcxMiw2IEBAIHN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKVx0KChzZXEpICUgTUVNQ0dfTlJfR0VOUylcbiAjZGVmaW5lIGdldF9tZW1jZ19iaW4oYmluKVx0KChiaW4pICUgTUVNQ0dfTlJfQklOUylcbiBcbi1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuLVxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdGlmIChtZW1jZykge1xuLVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbi1cbi1cdFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cbi1cdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZXBnZGF0ID0gcGdkYXQ7XG4tXG4tXHRcdHJldHVybiBscnV2ZWM7XG4tXHR9XG4tI2VuZGlmXG4tXHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4tXG4tXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjExOjU0LjI4ODgxMzMzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5Mzk4MzM0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTXNjYW4gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgdGFyZ2V0ZWQgY2hhbmdlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYW5vbnltb3VzIHBhZ2UgcmVjbGFtYXRpb24uIExldCdzIGRlbHZlIGluLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyYWwgc2hpZnRzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIEkga25vdyBpbnRpbWF0ZWx5LCBpcyBjZW50cmFsIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcGFnZSByZWNsYWltIHByb2Nlc3Nlcy4gSXQncyBzaW1wbHkgcmVvcmdhbml6aW5nIGBnZXRfbHJ1dmVjKClgIOKAkyBtb3ZpbmcgaXQgZWFybGllciBpbiB0aGUgZmlsZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZTsgdGhpcyBjb3VsZCBiZSBhIG1pbm9yIHJlZmFjdG9yaW5nIGZvciByZWFkYWJpbGl0eSBvciBwb3NzaWJseSB0byBmYWNpbGl0YXRlIGEgZnV0dXJlIGNoYW5nZS5cblxuVGhlIG1lYXQgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtb3JlIGdyYW51bGFyIGNoZWNrIHJlbGF0ZWQgdG8gdGhlIGF2YWlsYWJpbGl0eSBvciBwb3RlbnRpYWwgc2NhcmNpdHkgb2YgcmVjbGFpbWFibGUgYW5vbnltb3VzIHBhZ2VzLiBUaGVuLCBsb29raW5nIGF0IHRoZSBjYWxsIHRvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgIGlzIGtleS5cblxuVGhlIGNyaXRpY2FsIGNoYW5nZSBsaWVzIHdpdGhpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gSXQgYXBwZWFycyB3ZSdyZSBhZGRpbmcgYW4gYWRkaXRpb25hbCBjb25kaXRpb246IGBcdTAwMjZcdTAwMjYgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKWAgd2hlbiBlaXRoZXIgdGhlIGdsb2JhbCBzd2FwIHVzYWdlIG9yIHRoZSBtZW1vcnkgY2dyb3VwIHN3YXAgdXNhZ2UgaXMgZ3JlYXRlciB0aGFuIHplcm8uIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHBpZWNlLiBJdCBpbmRpY2F0ZXMgdGhhdCB3aGVuIHN3YXAgaXMgaW4gdXNlIChvciBwb3RlbnRpYWxseSBjbG9zZSB0byBiZWluZyB1c2VkKSwgdGhlIG5ldyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIHdpbGwgZWZmZWN0IHBhZ2UgcmVjbGFpbS4gVGhlIHN5c3RlbSB3aWxsICpub3QqIHJlY2xhaW0gYW5vbnltb3VzIHBhZ2VzIGlmIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCByZXR1cm5zIHRydWUuXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIHRoZSBpbXBhY3QuIFRoaXMgc3VnZ2VzdHMgYSBtb3JlIGNhdXRpb3VzIGFwcHJvYWNoIHRvIGFub255bW91cyBwYWdlIHJlY2xhaW0gd2hlbiBzd2FwIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHdpdGhpbiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYW5kIGhvdyBpdCBkZXRlcm1pbmVzIFwibG93XCIgcmVjbGFpbWFibGUgYW5vbiBwYWdlcy5cblxuVG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgZWZmZWN0LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZmluZCB3aGVyZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGBtbS92bXNjYW4uY2AgY29udGV4dC4gSSdsbCBlaXRoZXIgZ3JlcCBmb3IgaXRzIHVzYWdlcyBvciBzaW1wbHkgcmVhZCB0aHJvdWdoIHRoZSBmaWxlIHRvIGlkZW50aWZ5IHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgdGhpcyBjaGFuZ2UgY2FzY2FkZXMgdGhyb3VnaCB0aGUgc2Nhbm5pbmcgcHJvY2Vzcy4gVGhpcyB3aWxsIGxldCBtZSBhc3Nlc3MgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMTo1OC4yMjg2NTA2NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxODQ4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FuX3JlY2xhaW1fYW5vbl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zNjI9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3Ny1cXG5tbS92bXNjYW4uYzozNzg6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTM3OS1cXHRcXHRcXHRcXHRcXHQgIGludCBuaWQsXFxuLS1cXG5tbS92bXNjYW4uYz00MTA9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE1LVxcdFxcdHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKTtcXG5tbS92bXNjYW4uYzo0MTY6XFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgem9uZV90b19uaWQoem9uZSksIE5VTEwpKVxcbm1tL3Ztc2Nhbi5jLTQxNy1cXHRcXHRuciArPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfWk9ORV9JTkFDVElWRV9BTk9OKSArXFxuLS1cXG5tbS92bXNjYW4uYz0yNTMxPXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yNTQyLVxcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cXG5tbS92bXNjYW4uYzoyNTQzOlxcdGlmICghc2MtXFx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxubW0vdm1zY2FuLmMtMjU0NC1cXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDA4Mi1cXHRyZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NDA4MzpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQwODQtXFx0XFx0cmVjbGFpbWFibGUgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MDc4LVxcdGluYWN0aXZlX2xydV9wYWdlcyA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NjA3OTpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTYwODAtXFx0XFx0aW5hY3RpdmVfbHJ1X3BhZ2VzICs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjExOjU4LjI3NDg0NDgzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjAwMzE5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBBbm9ueW1vdXMgUGFnZSBSZWNsYW1hdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgbWVtb3J5IGlzc3VlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBteSBiZWFyaW5ncyBpbiBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkcmlsbCBkb3duIGFyb3VuZCB0aGUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGZ1bmN0aW9uIGFuZCB0aGUgd2F5IGBnZXRfc2Nhbl9jb3VudGAgaXMgaGFuZGxlZC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgbG9naWMgZ292ZXJuaW5nIGFub255bW91cyBwYWdlIHJlY2xhbWF0aW9uIGlzIGxpa2VseSBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGhlcmUg4oCTIHdoZW4gYXJlIHdlIGFjdHVhbGx5IGNob29zaW5nIHRvIHJlY2xhaW0gYW5vbiBwYWdlcywgYW5kIGhvdyBhcmUgd2UgZGV0ZXJtaW5pbmcgKmhvdyBtdWNoKiB0byByZWNsYWltPyBBcmUgd2UgYmVpbmcgdG9vIGFnZ3Jlc3NpdmUsIHRvbyBjb25zZXJ2YXRpdmUsIG9yIGlzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGFtaXNzIGluIHRoZSBhY2NvdW50aW5nPyBUaW1lIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MDAuMzM0ODgzNjQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4gMzQzOlxcdHtcXG4gMzQ0OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiAzNDc6XFx0XFx0aWYgKG1lbWNnKSB7XFxuIDM0ODpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlYztcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cXG4gMzUxOlxcdFxcdFxcdGlmICghbHJ1dmVjLVxcdTAwM2VwZ2RhdClcXG4gMzUyOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlcGdkYXQgPSBwZ2RhdDtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuIGxydXZlYztcXG4gMzU1OlxcdFxcdH1cXG4gMzU2OlxcdCNlbmRpZlxcbiAzNTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRyZXR1cm4gXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYztcXG4gMzYwOlxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gMzYzOlxcdFxcdFxcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiAzNjQ6XFx0e1xcbiAzNjU6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG4gMzY2OlxcdFxcdHVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRpZiAoIXNjIHx8IChzYy1cXHUwMDNlZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9JTykpXFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4gMzcyOlxcdFxcdFxcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XFxuIDM3MzpcXHRcXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XFxuIDM3NDpcXHRcXG4gMzc1OlxcdFxcdHJldHVybiBzd2FwY2FjaGUgXFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcXHUwMDNlXFx1MDAzZSA2LCBTV0FQX0NMVVNURVJfTUFYKTtcXG4gMzc2OlxcdH1cXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAzNzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbiAzODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdGlmIChtZW1jZyA9PSBOVUxMKSB7XFxuIDM4MzpcXHRcXHRcXHQvKlxcbiAzODQ6XFx0XFx0XFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxcbiAzODU6XFx0XFx0XFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbiAzODY6XFx0XFx0XFx0ICovXFxuIDM4NzpcXHRcXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gMzg4OlxcdFxcdFxcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxcbiAzODk6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDM5MDpcXHRcXHR9IGVsc2Uge1xcbiAzOTE6XFx0XFx0XFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xcbiAzOTI6XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiAzOTM6XFx0XFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIDM5NDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzk1OlxcdFxcdH1cXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0LypcXG4gMzk4OlxcdFxcdCAqIFRoZSBwYWdlIGNhbiBub3QgYmUgc3dhcHBlZC5cXG4gMzk5OlxcdFxcdCAqXFxuIDQwMDpcXHRcXHQgKiBDYW4gaXQgYmUgcmVjbGFpbWVkIGZyb20gdGhpcyBub2RlIHZpYSBkZW1vdGlvbj9cXG4gNDAxOlxcdFxcdCAqL1xcbiA0MDI6XFx0XFx0cmV0dXJuIGNhbl9kZW1vdGUobmlkLCBzYywgbWVtY2cpO1xcbiA0MDM6XFx0fVxcbiA0MDQ6XFx0XFxuIDQwNTpcXHQvKlxcbiA0MDY6XFx0ICogVGhpcyBtaXNzZXMgaXNvbGF0ZWQgZm9saW9zIHdoaWNoIGFyZSBub3QgYWNjb3VudGVkIGZvciB0byBzYXZlIGNvdW50ZXJzLlxcbiA0MDc6XFx0ICogQXMgdGhlIGRhdGEgb25seSBkZXRlcm1pbmVzIGlmIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBjb250aW51ZXMsIGl0IGlzXFxuIDQwODpcXHQgKiBub3QgZXhwZWN0ZWQgdGhhdCBpc29sYXRlZCBmb2xpb3Mgd2lsbCBiZSBhIGRvbWluYXRpbmcgZmFjdG9yLlxcbiA0MDk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjAwLjMzNTMyMTc0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MDYxNDE4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggZGVhbHMgd2l0aCBtZW1vcnkgcmVjbGFpbSwgc3dhcHBpbmcsIGFuZCBzY2FuIGJhbGFuY2luZy4gR2l2ZW4gdGhhdCwgaXQncyBwcmV0dHkgbGlrZWx5IHRoaXMgYXJlYSB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtcyDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgcG90ZW50aWFsbHkgdGhlIHNjaGVkdWxlciBpZiByZWNsYWltIGlzIGludm9sdmVkLCBtYXliZSBldmVuIEJQRiBpZiB0aGV5J3JlIGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgd2l0aCBwYWdlIGFsbG9jYXRpb24uIFllcCwgbG9va3MgbGlrZSBgV29ydGhGdXp6aW5nPXRydWVgLiBHb29kLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3ltYm9scyBhcmUgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbCBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZy4gQSBrZXkgZnVuY3Rpb24gaGVyZSBzZWVtcyB0byBiZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0Li4uIE9rYXksIGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgYnkgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgZ2V0X3NjYW5fY291bnRgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBhbmQgYHNob3VsZF9jb250aW51ZV9yZWNsYWltYC4gSG1tLCBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiB0aGVzZS5cblxuV2FpdCBhIHNlY29uZOKApiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgYHN0YXRpYyBpbmxpbmVgPyBPa2F5LCB0aGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgZnV6emluZyBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuICBTaW1pbGFybHksIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AgaXMgYWxzbyBzdGF0aWMgaW5saW5lLiBUaGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzLCBidXQgaXQncyBzdGlsbCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGl0cyBjYWxsZXJzLCBiZWNhdXNlIHRoZSBpbmxpbmluZyBtYXkgYmUgYSBnb29kIG9wcG9ydHVuaXR5IGZvciBzb21lIGludGVyZXN0aW5nIG11dGF0aW9uLiAgV2hhdCBhYm91dCBgZ2V0X2xydXZlY2A/IFl1cCwgdGhhdCdzIGFsc28gc3RhdGljLiBBbHJpZ2h0LlxuXG5TbywgSeKAmWxsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgY2FsbGVycyBub3c6IGBnZXRfc2Nhbl9jb3VudGAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YCwgYW5kIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgYW5kIHRoZW4gZXZhbHVhdGUgb3RoZXIgbm9uLXViaXF1aXRvdXMgY2FsbGVycyBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGxpa2VseSB0aGF0IGEgZnV6eiB0YXJnZXQgbmVlZHMgdG8gZm9jdXMgb24gdGhvc2UgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc2LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MDQuMTQxNDY3NDI2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODYzOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zY2FuX2NvdW50fHpvbmVfcmVjbGFpbWFibGVfcGFnZXN8c2V0X2luaXRpYWxfcHJpb3JpdHl8c2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Mzc4PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwOS0gKi9cXG5tbS92bXNjYW4uYzo0MTA6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3Ztc2Nhbi5jLTQxMS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTg9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy01MzUtXFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBNQVhfTlJfWk9ORVMgLSAxKSB7XFxubW0vdm1zY2FuLmM6NTM2OlxcdFxcdHJlY2xhaW1hYmxlICs9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7XFxubW0vdm1zY2FuLmMtNTM3LVxcdFxcdHdyaXRlX3BlbmRpbmcgKz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsXFxuLS1cXG5tbS92bXNjYW4uYz0yNDYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI1MzAtICovXFxubW0vdm1zY2FuLmM6MjUzMTpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI1MzItXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuLS1cXG5tbS92bXNjYW4uYz00MDEyPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA2OS1cXG5tbS92bXNjYW4uYzo0MDcwOnN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQwNzEte1xcbi0tXFxubW0vdm1zY2FuLmM9NDE1MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE1OC1cXG5tbS92bXNjYW4uYzo0MTU5OlxcdHNldF9pbml0aWFsX3ByaW9yaXR5KHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNDE2MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNTQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNzQtXFxubW0vdm1zY2FuLmM6NTE3NTpcXHRzZXRfaW5pdGlhbF9wcmlvcml0eShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNzYtXFxuLS1cXG5tbS92bXNjYW4uYz01ODk0PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTItXFxubW0vdm1zY2FuLmM6NTkxMzpcXHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XFxubW0vdm1zY2FuLmMtNTkxNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTUtXFx0XFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXFxubW0vdm1zY2FuLmM6NTk1NjpcXHRcXHQgKiBwcm9wb3J0aW9uYWxseSB3aGF0IHdhcyByZXF1ZXN0ZWQgYnkgZ2V0X3NjYW5fY291bnQoKS4gV2VcXG5tbS92bXNjYW4uYy01OTU3LVxcdFxcdCAqIHN0b3AgcmVjbGFpbWluZyBvbmUgTFJVIGFuZCByZWR1Y2UgdGhlIGFtb3VudCBzY2FubmluZ1xcbi0tXFxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDI3LSAqIFJlY2xhaW0vY29tcGFjdGlvbiBpcyB1c2VkIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuIEl0IHJlY2xhaW1zXFxubW0vdm1zY2FuLmM6NjAyODogKiBvcmRlci0wIHBhZ2VzIGJlZm9yZSBjb21wYWN0aW5nIHRoZSB6b25lLiBzaG91bGRfY29udGludWVfcmVjbGFpbSgpIHJldHVybnNcXG5tbS92bXNjYW4uYy02MDI5LSAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxcbi0tXFxubW0vdm1zY2FuLmMtNjAzMi0gKi9cXG5tbS92bXNjYW4uYzo2MDMzOnN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTYwMzQtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsXFxuLS1cXG5tbS92bXNjYW4uYz02MTY0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjI2MS1cXG5tbS92bXNjYW4uYzo2MjYyOlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MjYzLVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz02MjgyPXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX3JlYWR5KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMDAtXFx0ICogTm90ZSB0aGF0IHdlIHdvbid0IGFjdHVhbGx5IHJlY2xhaW0gdGhlIHdob2xlIGJ1ZmZlciBpbiBvbmUgYXR0ZW1wdFxcbm1tL3Ztc2Nhbi5jOjYzMDE6XFx0ICogYXMgdGhlIHRhcmdldCB3YXRlcm1hcmsgaW4gc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oKSBpcyBsb3dlci4gQnV0IGlmXFxubW0vdm1zY2FuLmMtNjMwMi1cXHQgKiB3ZSBhcmUgYWxyZWFkeSBhYm92ZSB0aGUgaGlnaCtnYXAgd2F0ZXJtYXJrLCBkb24ndCByZWNsYWltIGF0IGFsbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1Njk9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1ODAtXFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBaT05FX05PUk1BTCkge1xcbm1tL3Ztc2Nhbi5jOjY1ODE6XFx0XFx0aWYgKCF6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpIFxcdTAwMjZcXHUwMDI2IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKSlcXG5tbS92bXNjYW4uYy02NTgyLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjowNC4xOTAzNDA1MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjM3MTQyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeW1ib2xzIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgZWZmZWN0aXZlIGtlcm5lbCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZywgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgcmVjbGFpbS4gVGhlIGd1aWRlbGluZXMgZm9yIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGFuZCBpbnN0ZWFkLCBwaW5wb2ludCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFdlJ3JlIGxvb2tpbmcgdG8gYXZvaWQgdGhlIG5vaXNlIGFuZCBjb25jZW50cmF0ZSBvdXIgZWZmb3J0cy5cblxuSSd2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHM6IGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGdldF9zY2FuX2NvdW50YCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLCBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIGBscnVfZ2VuX2FnZV9ub2RlYCwgYW5kIGBscnVfZ2VuX3Nocmlua19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBob25lIGluIG9uIHRob3NlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBzaW5jZSB0aGF04oCZcyB3aGVyZSB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgc2hvdWxkIGJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgYWNjaWRlbnRhbGx5IGdyYWJiaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSAqdG9vKiBjb21tb24uXG5cbk5vdywgSSdtIGNoZWNraW5nIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQncyBub24tc3RhdGljIGFuZCBhcHBlYXJzIHRvIGJlIGEgY2xlYXIgZW50cnkgcG9pbnQgaW50byB6b25lIHJlY2xhaW0gbG9naWMuIFRoZW4gdGhlcmUncyBgZ2V0X3NjYW5fY291bnRgLCBgc2hyaW5rX2xydXZlY2AsIGFuZCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCB3aGljaCBhcmUgc3RhdGljIGJ1dCBtYXkgYmUgbGFyZ2UuIFRoaXMgd2lsbCBiZWFyIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBhbHNvIG5vdGVkIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgd2hpY2ggYXJlIHN0YXRpYyBpbmxpbmUsIGFuZCB0aHVzLCBtaWdodCBub3QgYmUgZGlyZWN0bHkgdGFyZ2V0YWJsZSwgYnV0IGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gYW5vbnltb3VzIHBhZ2UgcmVjbGFpbS4gSSBhbHNvIHJlbWVtYmVyIGBnZXRfbHJ1dmVjYCBhbmQgd2FudCB0byBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLlxuXG5JIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGxpa2UgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19TV0FQYC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGhvdyB0aG9zZSBjb25maWdzIG1pZ2h0IGluZmx1ZW5jZSB3aGljaCBjb2RlIHBhdGhzIGFyZSBhY3RpdmUuIEkgd2lsbCBzZWFyY2ggZm9yIHRoZXNlIHN5bWJvbHMgaW4gdGhlIGNvbmZpZ3MuXG5cbkluIHNob3J0LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZm9jdXNlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBsaWtlbHkgdGFyZ2V0aW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgbGFyZ2VyIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aG9zZSB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gdGhyb3VnaCBzb21lIG5vbi11YmlxdWl0b3VzIGVudHJ5LXBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjA5LjgyNzQ4NTczNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMjc1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X25yX3N3YXBfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz00MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF91c2FnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgc3dhcClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy00NDEtXFx0XFx0aWYgKHN3YXApXFxubW0vbWVtY29udHJvbC12MS5jOjQ0MjpcXHRcXHRcXHR2YWwgKz0gdG90YWxfc3dhcF9wYWdlcyAtIGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxubW0vbWVtY29udHJvbC12MS5jLTQ0My1cXHR9IGVsc2Uge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjUzLVxcdCAqIG5lZWQgZWFybGllciBhY2Nlc3MsIGFuZCB0aGUgd29ya2luZ3NldCBjb2RlIHJlbGllcyBvbiB0aGVcXG5tbS9tZW1jb250cm9sLmM6NDI1NDpcXHQgKiBjZ3JvdXAgdHJlZSBsaW5rYWdlIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKCkpLiBTb1xcbm1tL21lbWNvbnRyb2wuYy00MjU1LVxcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYzMj12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY1MC1cXG5tbS9tZW1jb250cm9sLmM6NTY1MTpsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy01NjUyLXtcXG5tbS9tZW1jb250cm9sLmM6NTY1MzpcXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xcbm1tL21lbWNvbnRyb2wuYy01NjU0LVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY4PXZvaWQgc2hvd19zd2FwX2NhY2hlX2luZm8odm9pZClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy03MC1cXHRwcmludGsoXFxcIiVsdSBwYWdlcyBpbiBzd2FwIGNhY2hlXFxcXG5cXFwiLCB0b3RhbF9zd2FwY2FjaGVfcGFnZXMoKSk7XFxubW0vc3dhcF9zdGF0ZS5jOjcxOlxcdHByaW50ayhcXFwiRnJlZSBzd2FwICA9ICVsZGtCXFxcXG5cXFwiLCBLKGdldF9ucl9zd2FwX3BhZ2VzKCkpKTtcXG5tbS9zd2FwX3N0YXRlLmMtNzItXFx0cHJpbnRrKFxcXCJUb3RhbCBzd2FwID0gJWx1a0JcXFxcblxcXCIsIEsodG90YWxfc3dhcF9wYWdlcykpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mzc4PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4Ni1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzozODc6XFx0XFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtMzg4LVxcdFxcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxcbi0tXFxubW0vdm1zY2FuLmMtMzkxLVxcdFxcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cXG5tbS92bXNjYW4uYzozOTI6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTM5My1cXHRcXHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3MTU9c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjcyMy1cXHRpZiAoIWNhbl9kZW1vdGUocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLCBtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzoyNzI0OlxcdCAgICBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcXHUwMDNjIE1JTl9MUlVfQkFUQ0gpXFxubW0vdm1zY2FuLmMtMjcyNS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTUyNS1cXHR9XFxubW0vd29ya2luZ3NldC5jOjUyNjpcXHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhldmljdGlvbl9tZW1jZykgXFx1MDAzZSAwKSB7XFxubW0vd29ya2luZ3NldC5jLTUyNy1cXHRcXHR3b3JraW5nc2V0X3NpemUgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGUoZXZpY3Rpb25fbHJ1dmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjowOS44NzY2MjA2ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4MTk5MDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBTd2FwIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBnZXRfbnJfc3dhcF9wYWdlc2AgaXMgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX1NXQVBgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB3aGVuIEknbSBhc3Nlc3NpbmcgdGhlIGNvcmUga2VybmVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIHdoZXRoZXIgdGhlIHN5c3RlbSBhY3R1YWxseSBoYXMgc3dhcCBlbmFibGVkLiBJZiBpdCBpc24ndCwgSSBuZWVkIHRvIGtub3cgd2h5IGFuZCB0aGF0IGhhcyBtZSB3b25kZXJpbmcgaWYgaXQncyBzYWZlIHRvIHVzZSBpbiBjb250ZXh0cyB3aGVyZSBzd2FwIGlzbid0LiBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgaXQncyBkZXBlbmRlbmNlIG9uIHRoZSBjb25maWcgZmxhZywgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUsIHJpZ2h0IG5vdyEgSSdsbCBnbyBjaGVjayB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoxMS44NTg2MTU0MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODkyNTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbnJfc3dhcF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD00MjU9c3RhdGljIGlubGluZSBib29sIHZtX3N3YXBfZnVsbCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDI5LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQzMDpzdGF0aWMgaW5saW5lIGxvbmcgZ2V0X25yX3N3YXBfcGFnZXModm9pZClcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MzEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDgzPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDg2LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ4NzojZGVmaW5lIGdldF9ucl9zd2FwX3BhZ2VzKClcXHRcXHRcXHQwTFxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ4OC0jZGVmaW5lIHRvdGFsX3N3YXBfcGFnZXNcXHRcXHRcXHQwTFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTg1PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU5MS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1OTI6ZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU5My1leHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTYwMD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA0LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjYwNTpzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA2LXtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo2MDc6XFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MTEuOTg3NTQ4Njk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjcyNDYxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZ2V0X25yX3N3YXBfcGFnZXNgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgYGdldF9ucl9zd2FwX3BhZ2VzYCBpbiB0aGUga2VybmVsLiBNeSBiZXN0IHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgNDIwLTQ5MCwgYXMgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBsaWtlbHkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZ3VhcmRzIHdpbGwgYmUuIFRoaXMgcmFuZ2Ugc2hvdWxkIGNvbnRhaW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGl0c2VsZiBhbmQgYW55IGAjaWZkZWZgIG9yIGAjaWZgIGJsb2NrcyB0aGF0IGNvbnRyb2wgd2hldGhlciBvciBob3cgaXQncyBkZWZpbmVkIGFuZCBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyB0byByZWxhdGUgdG8gc29tZSBzd2FwIGZlYXR1cmUgb3Igb3B0aW9uOyBmaW5kaW5nIHRoZSBndWFyZGluZyBtYWNybyB3aWxsIHRlbGwgbWUgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGUgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlIGluIHRoaXMgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MTQuMjE0Nzk3ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIwOlxcdGV4dGVybiBhdG9taWNfbG9uZ190IG5yX3N3YXBfcGFnZXM7XFxuIDQyMTpcXHRleHRlcm4gbG9uZyB0b3RhbF9zd2FwX3BhZ2VzO1xcbiA0MjI6XFx0ZXh0ZXJuIGF0b21pY190IG5yX3JvdGF0ZV9zd2FwO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHQvKiBTd2FwIDUwJSBmdWxsPyBSZWxlYXNlIHN3YXBjYWNoZSBtb3JlIGFnZ3Jlc3NpdmVseS4uICovXFxuIDQyNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdm1fc3dhcF9mdWxsKHZvaWQpXFxuIDQyNjpcXHR7XFxuIDQyNzpcXHRcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bnJfc3dhcF9wYWdlcykgKiAyIFxcdTAwM2MgdG90YWxfc3dhcF9wYWdlcztcXG4gNDI4OlxcdH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0c3RhdGljIGlubGluZSBsb25nIGdldF9ucl9zd2FwX3BhZ2VzKHZvaWQpXFxuIDQzMTpcXHR7XFxuIDQzMjpcXHRcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bnJfc3dhcF9wYWdlcyk7XFxuIDQzMzpcXHR9XFxuIDQzNDpcXHRcXG4gNDM1OlxcdGV4dGVybiB2b2lkIHNpX3N3YXBpbmZvKHN0cnVjdCBzeXNpbmZvICopO1xcbiA0MzY6XFx0ZXh0ZXJuIGludCBwaW5faGliZXJuYXRpb25fc3dhcF90eXBlKGRldl90IGRldmljZSwgc2VjdG9yX3Qgb2Zmc2V0KTtcXG4gNDM3OlxcdGV4dGVybiB2b2lkIHVucGluX2hpYmVybmF0aW9uX3N3YXBfdHlwZShpbnQgdHlwZSk7XFxuIDQzODpcXHRleHRlcm4gaW50IGZpbmRfaGliZXJuYXRpb25fc3dhcF90eXBlKGRldl90IGRldmljZSwgc2VjdG9yX3Qgb2Zmc2V0KTtcXG4gNDM5OlxcdGludCBmaW5kX2ZpcnN0X3N3YXAoZGV2X3QgKmRldmljZSk7XFxuIDQ0MDpcXHRleHRlcm4gdW5zaWduZWQgaW50IGNvdW50X3N3YXBfcGFnZXMoaW50LCBpbnQpO1xcbiA0NDE6XFx0ZXh0ZXJuIHNlY3Rvcl90IHN3YXBkZXZfYmxvY2soaW50LCBwZ29mZl90KTtcXG4gNDQyOlxcdGV4dGVybiBpbnQgX19zd2FwX2NvdW50KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDQzOlxcdGV4dGVybiBib29sIHN3YXBfZW50cnlfc3dhcHBlZChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDQ0OlxcdGV4dGVybiBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSk7XFxuIDQ0NTpcXHRzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbztcXG4gNDQ2OlxcdGV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDQ3OlxcdHNlY3Rvcl90IHN3YXBfZm9saW9fc2VjdG9yKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHQvKlxcbiA0NTA6XFx0ICogSWYgdGhlcmUgaXMgYW4gZXhpc3Rpbmcgc3dhcCBzbG90IHJlZmVyZW5jZSAoc3dhcCBlbnRyeSkgYW5kIHRoZSBjYWxsZXJcXG4gNDUxOlxcdCAqIGd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBubyByYWNlIG1vZGlmaWNhdGlvbiBvZiBpdCAoZS5nLiwgUFRMXFxuIDQ1MjpcXHQgKiBwcm90ZWN0aW5nIHRoZSBzd2FwIGVudHJ5IGluIHBhZ2UgdGFibGU7IHNobWVtJ3MgY21weGNoZyBwcm90ZWN0cyB0XFxuIDQ1MzpcXHQgKiBoZSBzd2FwIGVudHJ5IGluIHNobWVtIG1hcHBpbmcpLCB0aGVzZSB0d28gaGVscGVycyBiZWxvdyBjYW4gYmUgdXNlZFxcbiA0NTQ6XFx0ICogdG8gcHV0L2R1cCB0aGUgZW50cmllcyBkaXJlY3RseS5cXG4gNDU1OlxcdCAqXFxuIDQ1NjpcXHQgKiBBbGwgZW50cmllcyBtdXN0IGJlIGFsbG9jYXRlZCBieSBmb2xpb19hbGxvY19zd2FwKCkuIEFuZCB0aGV5IG11c3QgaGF2ZVxcbiA0NTc6XFx0ICogYSBzd2FwIGNvdW50IFxcdTAwM2UgMS4gU2VlIGNvbW1lbnRzIG9mIGZvbGlvXypfc3dhcCBoZWxwZXJzIGZvciBtb3JlIGluZm8uXFxuIDQ1ODpcXHQgKi9cXG4gNDU5OlxcdGludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbiA0NjA6XFx0dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0LypcXG4gNDYzOlxcdCAqIGZvbGlvX2ZyZWVfc3dhcCB0cmllcyB0byBmcmVlIHRoZSBzd2FwIGVudHJpZXMgcGlubmVkIGJ5IGEgc3dhcCBjYWNoZVxcbiA0NjQ6XFx0ICogZm9saW8sIGl0IGhhcyB0byBiZSBoZXJlIHRvIGJlIGNhbGxlZCBieSBvdGhlciBjb21wb25lbnRzLlxcbiA0NjU6XFx0ICovXFxuIDQ2NjpcXHRib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0LyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi9cXG4gNDY5OlxcdHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XFxuIDQ3MDpcXHR2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2c2ktXFx1MDAzZXVzZXJzKTtcXG4gNDc1OlxcdH1cXG4gNDc2OlxcdFxcbiA0Nzc6XFx0I2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cXG4gNDc4OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHJldHVybiBOVUxMO1xcbiA0ODE6XFx0fVxcbiA0ODI6XFx0XFxuIDQ4MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcXG4gNDg0OlxcdHtcXG4gNDg1OlxcdH1cXG4gNDg2OlxcdFxcbiA0ODc6XFx0I2RlZmluZSBnZXRfbnJfc3dhcF9wYWdlcygpXFx0XFx0XFx0MExcXG4gNDg4OlxcdCNkZWZpbmUgdG90YWxfc3dhcF9wYWdlc1xcdFxcdFxcdDBMXFxuIDQ4OTpcXHQjZGVmaW5lIHRvdGFsX3N3YXBjYWNoZV9wYWdlcygpXFx0XFx0XFx0MFVMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjE0LjIxNDg4MzU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTQwNzEwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXAgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZS4gSWYgYENPTkZJR19TV0FQYCBpc24ndCB0dXJuZWQgb24sIHRoZW4gYGdldF9ucl9zd2FwX3BhZ2VzKClgIGlzIGdvaW5nIHRvIHJldHVybiAwLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb25kaXRpb24gYGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDBgIGlzIGF1dG9tYXRpY2FsbHkgZmFsc2UuIFRoYXQgbWVhbnMgd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIHdvcnJ5IGFib3V0IGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AgYmVpbmcgZXZhbHVhdGVkIGluIGVpdGhlciB0aGUgc3RhbmRhcmQgb3IgbWVtY2cgc2NlbmFyaW9zLCBpdCBqdXN0IGdldHMgc2tpcHBlZC4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuUGx1cywgSSBzZWUgdGhhdCB0aGlzIG5ldyBoZWxwZXIsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGlzIGxvb2tpbmcgYXQgYE5SX1NXQVBDQUNIRWAgYW5kIHRoZW4gY2FsY3VsYXRpbmcgYW5vbiBwYWdlcyByZWxhdGl2ZSB0byB0aGUgc3dhcGNhY2hlLiBBbHJpZ2h0LCB0aGF0J3MgYSBrZXkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IHByZXNzdXJlIGNhbGN1bGF0aW9ucyBoZXJlLlxuXG5TbywgdGhlIHdob2xlIHRoaW5nIHJlYWxseSBoaW5nZXMgb24gYENPTkZJR19TV0FQYCBhbmQgYENPTkZJR19NRU1DR2AuIEdvdHRhIGNvbmZpcm0gdGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCBhcHByb3ByaWF0ZWx5LiBMZXQgbWUgdHJhY2sgZG93biB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gSSByZW1lbWJlciBzZWVpbmcgdGhlbSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLCBzbyBsZXQgbWUgcHVsbCB1cCB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdmVyaWZ5LiBSaWdodCwgYFNXQVBgIGFuZCBgTUVNQ0dgIGFyZSBib3RoIGluIGBpbml0L0tjb25maWdgLiBUaW1lIHRvIGNoZWNrIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoxNy4xMjg5NTg0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMTMwODcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoxNy4xNzQyODMyNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NzE0ODM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIGluc3RpbmN0LCB3aGVuIG5lZWRpbmcgdG8gZmlndXJlIG91dCBob3cgc3dhcHBpbmcgb3IgbWVtb3J5IGNncm91cCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBpbiB0aGlzIGtlcm5lbCwgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMgZGVmaW5lZCB0aGVyZSwgbWF5YmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19TV0FQYCBvciBgQ09ORklHX01FTUNHYCwgb3IgcGVyaGFwcyBldmVuIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGZlYXR1cmUncyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8sIHVuZGVyc3RhbmQgaG93IHRoZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gRnJvbSB0aGVyZSBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MTkuMzYxNDM1MzYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc5ODQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUHxjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjE5LjQxMjI0Mjk1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEzNzc2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBNRU1DRyBjb25maWd1cmF0aW9uLCB3aGljaCBtZWFucyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgaW5pdGlhbGl6YXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IGBpbml0L0tjb25maWdgIHNwZWNpZmljYWxseS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHdoZXJlIHRoZSBpbml0aWFsIG9wdGlvbnMgZm9yIGEgbG90IG9mIGNvcmUga2VybmVsIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCBhbmQgTUVNQ0cgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGV5J2QgYmUgZGVjbGFyZWQgdGhlcmUsIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIHRoZWlyIGRlZmF1bHQgZW5hYmxpbmcuIEhvcGVmdWxseSwgaXQncyBjbGVhcmx5IGxhaWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZGVwZW5kZW5jeSB0cmVlIHRoZXJlIGFmZmVjdHMgbXkgY3VycmVudCBwcm9ibGVtLiBHb3R0YSBtYWtlIHN1cmUgSSBhbHNvIGxvb2sgZm9yIHBvdGVudGlhbCBmZWF0dXJlIGZsYWcgZ3VhcmRzIGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc2NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjIxLjkyNjAyMjQzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMDIwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY2PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzUtXFxuaW5pdC9LY29uZmlnOjEwNzY6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzctXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkxLVxcbmluaXQvS2NvbmZpZzoxMDkyOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk4LVxcbmluaXQvS2NvbmZpZzoxMDk5OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjIxLjk3MTMzMTA2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcyMTkwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU1dBUCBhbmQgTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgU1dBUGAgYW5kIGBNRU1DR2AgYXJlIGNvbmZpZ3VyZWQgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgZGVlcGVyIGFuZCBlbnN1cmUgSSdtIGF3YXJlIG9mIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgcmVhZGluZyBhcm91bmQgYFNXQVBgIGVudHJpZXMgaW4gYG1tL0tjb25maWdgIGFuZCwgc2ltaWxhcmx5LCBJJ2xsIGZvY3VzIG9uIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb25zIGluIGBpbml0L0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhvc2Uga2V5d29yZHMsIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaW50ZXJhY3Qgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoyNC4yNDM1MjU2MDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0I1xcbiAgIDY6XFx0IyBGb3Igc29tZSByZWFzb24gbWljcm9ibGF6ZSBhbmQgbmlvczIgaGFyZCBjb2RlIFNXQVA9bi4gIEhvcGVmdWxseSB3ZSBjYW5cXG4gICA3OlxcdCMgYWRkIHByb3BlciBTV0FQIHN1cHBvcnQgdG8gdGhlbSwgaW4gd2hpY2ggY2FzZSB0aGlzIGNhbiBiZSByZW1vdmUuXFxuICAgODpcXHQjXFxuICAgOTpcXHRjb25maWcgQVJDSF9OT19TV0FQXFxuICAxMDpcXHRcXHRib29sXFxuICAxMTpcXHRcXG4gIDEyOlxcdG1lbnVjb25maWcgU1dBUFxcbiAgMTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfTk9fU1dBUFxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoyNC4yNDM2NDQ4MDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNDYwMjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoZSB3ZWVkcyBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyB6ZXJvIGluIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLlwiIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoYXQgZ2VuZXJhbCBhcmVhIGFyb3VuZCBsaW5lIDEwNzYuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byB3YW50IHRvIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcywgYW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIHRoZSBiZWhhdmlvciB3ZSdyZSBzZWVpbmcuIFRoaXMgdXN1YWxseSBjb250YWlucyB0aGUgYmFzaWMgZmVhdHVyZXMgb2YgYSBrZXJuZWwsIHNvIEknbSBob3BpbmcgdG8gaWRlbnRpZnkgd2hhdCBmZWF0dXJlcyBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBvciB3aGF0IGhhcyByZWNlbnRseSBiZWVuIG1vZGlmaWVkIHRvIGNhdXNlIHRoZSBjdXJyZW50IGlzc3VlLiBIb3BlZnVsbHkgdGhhdCBsaW5lIHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgcHJvYmxlbSBhdCBoYW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MjYuNjc4MjUxNTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDcxOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA3MjpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA3MzpcXHRcXG4xMDc0OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRjb25maWcgTUVNQ0dcXG4xMDc3OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwNzg6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwNzk6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgwOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgxOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODI6XFx0XFx0aGVscFxcbjEwODM6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4NjpcXHRcXHRib29sXFxuMTA4NzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA4ODpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA4OTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5MDpcXHRcXHRkZWZhdWx0IHlcXG4xMDkxOlxcdFxcbjEwOTI6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTA5MzpcXHRcXHRib29sXFxuMTA5NDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk3OlxcdFxcdGRlZmF1bHQgeVxcbjEwOTg6XFx0XFxuMTA5OTpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTAwOlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTEwMTpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwMjpcXHRcXHRkZWZhdWx0IG5cXG4xMTAzOlxcdFxcdGhlbHBcXG4xMTA0OlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTEwNTpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTEwNjpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTEwNzpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMDg6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoyNi42NzgzODMwNjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQyMjU3NDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGRpZmYgc2hvd3Mgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2UgYGdldF9scnV2ZWNgIGhhcyBiZWVuIG1vdmVkIGFuZCBhIG5ldyBmdW5jdGlvbiwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhlIGxhdHRlciBhcHBlYXJzIHRvIGJlIHVzZWQgd2l0aGluIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGlzIGRvaW5nLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb2RlIGZvciBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLiBIbW0sIGl0J3MgY2FsY3VsYXRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYW5vbnltb3VzIHBhZ2VzIGFuZCBzd2FwIGNhY2hlIHBhZ2VzLCBsaWtlbHkgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIGluIGEgbG93LW1lbW9yeSBzaXR1YXRpb24uIFRoZSBjb3JlIGxvZ2ljIGhpbmdlcyBvbiBjb21wYXJpbmcgYHN3YXBjYWNoZWAgdG8gYSBmcmFjdGlvbiBvZiBgYW5vbl9wYWdlc2AgYW5kIGBTV0FQX0NMVVNURVJfTUFYYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIGRpZyBkZWVwZXIuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludDogaG93IGlzIGBscnV2ZWNgIG9idGFpbmVkPyBBaCwgYGdldF9scnV2ZWNgIGlzIHVzZWQuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvZGUgdXNlcyBgbWVtY2dgIHRvIHNlbGVjdCB0aGUgcmlnaHQgTFJVIHZlY3Rvci4gVGhlcmUncyBhIGAjaWZkZWYgQ09ORklHX01FTUNHYCBibG9jaywgd2hpY2ggaXMgZXhwZWN0ZWQuIEJ1dCBJIHNlZSB0aGlzIGBWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7YC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nLiBXYWl0IGEgbWludXRlLi4uIFdoYXQgaGFwcGVucyBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCAqYnV0KiBgbWVtY2dgIGlzIGBOVUxMYCwgYW5kIGAhbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlP1xuXG5XaGVuIHRoZSBzeXN0ZW0gcnVucyBnbG9iYWwgcmVjbGFpbSDigJMgdGhpbmsga3N3YXBkIG9yIGRpcmVjdCByZWNsYWltIGZvciB0aGUgd2hvbGUgbWVtb3J5IOKAkyBgbWVtY2dgICp3aWxsKiBiZSBgTlVMTGAuIFRoaXMgdHJpZ2dlcnMgdGhlIGBWTV9XQVJOX09OX09OQ0VgISBBbmQsIGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBub3QgZXhwbGljaXRseSBkaXNhYmxlZCAod2hpY2ggaXMgdGhlIGRlZmF1bHQgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBvbiBhbmQgYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgbm90IHVzZWQgYXQgYm9vdCksIGAhbWVtX2Nncm91cF9kaXNhYmxlZCgpYCB3aWxsICphbHdheXMqIGJlIHRydWUuXG5cblNvLCB0aGUgd2FybmluZyB3aWxsIGZpcmUgZHVyaW5nIGdsb2JhbCByZWNsYWltLCB3aGljaCBpcyBhIG1ham9yIHJlZCBmbGFnISBQcmV2aW91c2x5LCBgZ2V0X2xydXZlY2Agd2FzIG9ubHkgY2FsbGVkIGluIGNvbnRleHRzIHdoZXJlIGBtZW1jZ2Agd2FzIHByb3Blcmx5IGhhbmRsZWQgb3IgY2hlY2tlZCwgbGlrZSBpbiBtdWx0aS1nZW4gTFJVLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgZ2V0X2xydXZlY2Agd2FzICpwcmV2aW91c2x5KiBjYWxsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuIFRoaXMgbG9va3MgbGlrZSBhIHJlZ3Jlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MzIuMTAwOTYyNTE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc5MDExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTMyMj1zdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMzQxLVxcbm1tL3Ztc2Nhbi5jOjM0MjpzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtMzQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM2Mj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY0LXtcXG5tbS92bXNjYW4uYzozNjU6XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy0zNjYtXFx0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XFxuLS1cXG5tbS92bXNjYW4uYz0yMzIxPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjMyMy1cXHR1bnNpZ25lZCBsb25nIGZpbGU7XFxubW0vdm1zY2FuLmM6MjMyNDpcXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jLTIzMjUtXFxuLS1cXG5tbS92bXNjYW4uYy0yMzI4LVxcbm1tL3Ztc2Nhbi5jOjIzMjk6XFx0dGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgcGdkYXQpO1xcbm1tL3Ztc2Nhbi5jLTIzMzAtXFxuLS1cXG5tbS92bXNjYW4uYy0yMzQwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjIzNDE6XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbm1tL3Ztc2Nhbi5jOjIzNDI6XFx0c2MtXFx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG5tbS92bXNjYW4uYzoyMzQzOlxcdHNjLVxcdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3Q7XFxubW0vdm1zY2FuLmM6MjM0NDpcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG5tbS92bXNjYW4uYy0yMzQ1LVxcbi0tXFxubW0vdm1zY2FuLmMtMjM1Ny1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzoyMzU4OlxcdFxcdHJlZmF1bHRzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcXG5tbS92bXNjYW4uYy0yMzU5LVxcdFxcdFxcdFxcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTik7XFxubW0vdm1zY2FuLmM6MjM2MDpcXHRcXHRpZiAocmVmYXVsdHMgIT0gdGFyZ2V0X2xydXZlYy1cXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9BTk9OXSB8fFxcbm1tL3Ztc2Nhbi5jOjIzNjE6XFx0XFx0XFx0aW5hY3RpdmVfaXNfbG93KHRhcmdldF9scnV2ZWMsIExSVV9JTkFDVElWRV9BTk9OKSlcXG5tbS92bXNjYW4uYy0yMzYyLVxcdFxcdFxcdHNjLVxcdTAwM2VtYXlfZGVhY3RpdmF0ZSB8PSBERUFDVElWQVRFX0FOT047XFxuLS1cXG5tbS92bXNjYW4uYy0yMzY1LVxcbm1tL3Ztc2Nhbi5jOjIzNjY6XFx0XFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTIzNjctXFx0XFx0XFx0XFx0V09SS0lOR1NFVF9BQ1RJVkFURV9GSUxFKTtcXG5tbS92bXNjYW4uYzoyMzY4OlxcdFxcdGlmIChyZWZhdWx0cyAhPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0ZJTEVdIHx8XFxubW0vdm1zY2FuLmM6MjM2OTpcXHRcXHQgICAgaW5hY3RpdmVfaXNfbG93KHRhcmdldF9scnV2ZWMsIExSVV9JTkFDVElWRV9GSUxFKSlcXG5tbS92bXNjYW4uYy0yMzcwLVxcdFxcdFxcdHNjLVxcdTAwM2VtYXlfZGVhY3RpdmF0ZSB8PSBERUFDVElWQVRFX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYy0yMzgwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjIzODE6XFx0ZmlsZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jLTIzODItXFx0aWYgKGZpbGUgXFx1MDAzZVxcdTAwM2Ugc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwMjZcXHUwMDI2ICEoc2MtXFx1MDAzZW1heV9kZWFjdGl2YXRlIFxcdTAwMjYgREVBQ1RJVkFURV9GSUxFKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmM9Mjg4OT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkwMi1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG5tbS92bXNjYW4uYzoyOTAzOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtMjkwNC1cXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MTY9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzItXFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG5tbS92bXNjYW4uYzoyOTMzOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtMjkzNC1cXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzNzI9dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy00Mzc5LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG5tbS92bXNjYW4uYzo0MzgwOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtNDM4MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzOTc9dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtNDQwMS1cXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbm1tL3Ztc2Nhbi5jOjQ0MDI6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy00NDAzLVxcbi0tXFxubW0vdm1zY2FuLmM9NDQwOD12b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy00NDE0LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG5tbS92bXNjYW4uYzo0NDE1OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtNDQxNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0MzQ9dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDQzNS17XFxubW0vdm1zY2FuLmM6NDQzNjpcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jLTQ0MzctXFxuLS1cXG5tbS92bXNjYW4uYz00NDQzPWJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDQ0NC17XFxubW0vdm1zY2FuLmM6NDQ0NTpcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jLTQ0NDYtXFx0aW50IHR5cGU7XFxuLS1cXG5tbS92bXNjYW4uYz00NDkwPXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ0OTEte1xcbm1tL3Ztc2Nhbi5jOjQ0OTI6XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy00NDkzLVxcdGludCB0eXBlO1xcbi0tXFxubW0vdm1zY2FuLmM9NDU2Mj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU2OC1cXG5tbS92bXNjYW4uYzo0NTY5OlxcdGNoaWxkX2xydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmM6NDU3MDpcXHRwYXJlbnRfbHJ1dmVjID0gZ2V0X2xydXZlYyhwYXJlbnQsIG5pZCk7XFxubW0vdm1zY2FuLmMtNDU3MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODM9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTMwOC1cXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbm1tL3Ztc2Nhbi5jOjUzMDk6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01MzEwLVxcbi0tXFxubW0vdm1zY2FuLmM9NTQyNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0MzktXFx0XFx0XFx0aWYgKCFucl90b19za2lwLS0pXFxubW0vdm1zY2FuLmM6NTQ0MDpcXHRcXHRcXHRcXHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01NDQxLVxcdFxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NTY9c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0NzEtXFxubW0vdm1zY2FuLmM6NTQ3MjpcXHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01NDczLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU2MzQ9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY1My1cXHRzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZztcXG5tbS92bXNjYW4uYzo1NjU0OlxcdGxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtNTY1NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4Mjk9dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtNTgzNy1cXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbm1tL3Ztc2Nhbi5jOjU4Mzg6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01ODM5LVxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjE2ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNjYtXFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xcbm1tL3Ztc2Nhbi5jOjYxNjc6XFx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcXG5tbS92bXNjYW4uYy02MTY4LVxcdGJvb2wgcmVjbGFpbWFibGUgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNzgtXFxubW0vdm1zY2FuLmM6NjE3OTpcXHR0YXJnZXRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCBwZ2RhdCk7XFxubW0vdm1zY2FuLmMtNjE4MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDMtXFx0XFx0aWYgKGNncm91cF9yZWNsYWltKHNjKSBcXHUwMDI2XFx1MDAyNiB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSlcXG5tbS92bXNjYW4uYzo2MjQ0OlxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX0NHUk9VUF9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxubW0vdm1zY2FuLmMtNjI0NS1cXG5tbS92bXNjYW4uYy02MjQ2LVxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jOjYyNDc6XFx0XFx0XFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxubW0vdm1zY2FuLmMtNjI0OC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy02MjU3LVxcdCAgICAhc2MtXFx1MDAzZWhpYmVybmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo2MjU4OlxcdCAgICAodGVzdF9iaXQoTFJVVkVDX0NHUk9VUF9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncykgfHxcXG5tbS92bXNjYW4uYzo2MjU5OlxcdCAgICAgdGVzdF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpKSlcXG5tbS92bXNjYW4uYy02MjYwLVxcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9DT05HRVNURUQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjQ0MT1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTY0NDIte1xcbm1tL3Ztc2Nhbi5jOjY0NDM6XFx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcXG5tbS92bXNjYW4uYy02NDQ0LVxcdHVuc2lnbmVkIGxvbmcgcmVmYXVsdHM7XFxuLS1cXG5tbS92bXNjYW4uYy02NDQ4LVxcbm1tL3Ztc2Nhbi5jOjY0NDk6XFx0dGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHRhcmdldF9tZW1jZywgcGdkYXQpO1xcbm1tL3Ztc2Nhbi5jOjY0NTA6XFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0FOT04pO1xcbm1tL3Ztc2Nhbi5jOjY0NTE6XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9BTk9OXSA9IHJlZmF1bHRzO1xcbm1tL3Ztc2Nhbi5jOjY0NTI6XFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jOjY0NTM6XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9GSUxFXSA9IHJlZmF1bHRzO1xcbm1tL3Ztc2Nhbi5jLTY0NTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjozMi4xNDg3NTg4MjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2MjYzMTYwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTWVtb3J5IFJlY2xhaW0gTG9naWMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb2RlIGNoYW5nZSBhcyBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBzaXR1YXRpb24gdGhhdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSd2ZSBzcG90dGVkIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBuZXcgY2FsbCB0byBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYW5kIGEgbW92ZSBjb25jZXJuaW5nIGBnZXRfbHJ1dmVjKClgLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IHdoZW4gd2UncmUgKm5vdCogZGVhbGluZyB3aXRoIG1lbWNncyAod2hpY2ggaXMgdGhlIHN0YW5kYXJkLCBkZWZhdWx0IHNldHVwKSwgYW5kIGBDT05GSUdfTUVNQ0dgIGlzICplbmFibGVkKiDigJMgYSB2ZXJ5IGNvbW1vbiBzY2VuYXJpbyDigJMgY2FsbGluZyBgZ2V0X2xydXZlYyhOVUxMLCBuaWQpYCB0cmlnZ2VycyBhIGBWTV9XQVJOX09OX09OQ0VgIGFzc2VydGlvbiwgd2hpY2ggaXMgYSBrZXJuZWwgd2FybmluZy4gVGhpcyBpcyBoYXBwZW5pbmcgYmVjYXVzZSBvZiBhIGNoZWNrIHJlbGF0ZWQgdG8gbWVtY2cgbm90IGJlaW5nIGRpc2FibGVkIHdoZW4gYG1lbWNnYCBpcyBudWxsLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBub24tbWVtY2cgcmVjbGFpbSBwYXRoIGhhcyBiZWVuIGFsdGVyZWQuIEZ1cnRoZXJtb3JlLCB0aGVyZSdzIGEgY2hhbmdlIGluIGhvdyB0aGUgTFJVIHNjYW5uaW5nIGlzIGJhbGFuY2VkIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIHBhZ2VzIHVuZGVyIHN3YXAgcHJlc3N1cmUuIFRoZSBsb2dpYyBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gaG93IHdlIGRlY2lkZSB0byByZWNsYWltIGFub24gcGFnZXMsIGVzcGVjaWFsbHkgd2hlbiBzd2FwIGlzIHByZXNlbnQuIEl0IGNvdWxkIGFmZmVjdCB0aGUgYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgcGFnZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuXG5XZSBoYXZlIGEgY2xlYXIgcGF0aCB0aGF0IGxlYWRzIHRvIHRoaXMgYXNzZXJ0aW9uIG9yIGFsdGVyZWQgYmVoYXZpb3IgYW5kIGFmZmVjdHMgcmVjbGFpbS9zY2FubmluZy4gU28sIGl0J3Mgd29ydGggZnV6emluZyB0byBleHBsb3JlIHRoaXMgcGF0aC5cblxuRm9yIEZvY3VzU3ltYm9scywgaGVyZSdzIHdoYXQgc3RhbmRzIG91dDogYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLCBgZ2V0X2xydXZlY2AsIGBnZXRfc2Nhbl9jb3VudGAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYW5kIGBzaHJpbmtfbHJ1dmVjYC4gVGhlc2UgYXJlIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGNoYW5nZWQgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIExSVSBzY2FubmluZyBhbmQgYW5vbiBwYWdlIHJlY2xhbWF0aW9uLiBUaGV5IGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBpbnRvIHRoZSBtb2RpZmllZCBsb2dpYy5cblxuQW5kLCBvZiBjb3Vyc2UsIGZvciBlbmFibGluZyBjb25maWdzLCB3ZSdsbCBuZWVkIGBTV0FQYCBiZWNhdXNlIG9mIHRoZSBgZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMGAgY2hlY2sgYW5kIHN3YXAgY2FjaGUgbG9naWMsIGFuZCBgTUVNQ0dgIGJlY2F1c2UgaXQncyByZXF1aXJlZCBmb3IgdGhlIGFzc2VydGlvbiB0aGF0IG9jY3VycyB3aGVuIGBnZXRfbHJ1dmVjYCBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgbWVtY2cgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLCBhbmQgYWxzbyBmb3IgdGhlIGNhbGwgcGF0aCBpbiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3NSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjQzLjc3NTA3ODYwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTQyNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfbHJ1dmVjXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVjbGFpbWFibGVfYW5vbl9pc19sb3dcIixcbiAgICBcImNhbl9yZWNsYWltX2Fub25fcGFnZXNcIixcbiAgICBcImdldF9scnV2ZWNcIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJ6b25lX3JlY2xhaW1hYmxlX3BhZ2VzXCIsXG4gICAgXCJzaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGFub255bW91cyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSBpbnRvIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSB0byBnYXRlIGFub24gcGFnZSBzY2FubmluZyBiYXNlZCBvbiBzd2FwY2FjaGUgbGV2ZWxzLiBBZGRpdGlvbmFsbHksIGNhbGxpbmcgZ2V0X2xydXZlYygpIHdpdGggYSBOVUxMIG1lbWNnIGluIG5vbi1tZW1jZyByZWNsYWltIHBhdGhzIHVuZGVyIENPTkZJR19NRU1DRyBleGVjdXRlcyBWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSksIGludHJvZHVjaW5nIHBvdGVudGlhbCBhc3NlcnRpb24gdHJpZ2dlcnMgYW5kIGFsdGVyaW5nIHNjYW4gYmFsYW5jZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjQzLjg1ODYyOTI1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzUyNDI1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjo0My44NTkwOTExODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzUzNDc3NjMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbiBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGhlbHBlciBhbmQgaW52b2tpbmcgaXQgZnJvbSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVG8gc3VwcG9ydCB0aGlzLCBgZ2V0X2xydXZlYygpYCBpcyByZWxvY2F0ZWQgZWFybGllciBpbiB0aGUgZmlsZS5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG5cXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaW52YWxpZCBzdHJ1Y3QgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjExOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTMzOSw2ICszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdHJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuK3tcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRpZiAobWVtY2cpIHtcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXHUwMDI2bWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWM7XG4rXG4rXHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXG4rXHRcdGlmICghbHJ1dmVjLVx1MDAzZXBnZGF0KVxuK1x0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuK1xuK1x0XHRyZXR1cm4gbHJ1dmVjO1xuK1x0fVxuKyNlbmRpZlxuK1x0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuK1x0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4rXG4rXHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4rXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4rXG4rXHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuQEAgLTM0OCwxMSArMzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxuIFx0XHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4gXHRcdCAqL1xuLVx0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMClcbitcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xuLVx0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDApXG4rXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG5AQCAtMjY3NCwyNiArMjcxMiw2IEBAIHN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKVx0KChzZXEpICUgTUVNQ0dfTlJfR0VOUylcbiAjZGVmaW5lIGdldF9tZW1jZ19iaW4oYmluKVx0KChiaW4pICUgTUVNQ0dfTlJfQklOUylcbiBcbi1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuLVxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdGlmIChtZW1jZykge1xuLVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbi1cbi1cdFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cbi1cdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZXBnZGF0ID0gcGdkYXQ7XG4tXG4tXHRcdHJldHVybiBscnV2ZWM7XG4tXHR9XG4tI2VuZGlmXG4tXHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4tXG4tXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjQzLjg1OTA5MjA3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ5ODU1Mzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5IGluIGBtbS92bXNjYW4uY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBtbS92bXNjYW4uY2AgdGhhdCBtb3ZlcyBgZ2V0X2xydXZlYygpYCB1cCBpbiB0aGUgZmlsZSBhbmQgaW50cm9kdWNlcyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAsIHdoaWNoIGlzIHRoZW4gdXNlZCBieSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgS01TQU4gb3IgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgZm9yIHRoaXMgY29kZSBjaGFuZ2UuIEdpdmVuIG15IGV4cGVydGlzZSwgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgLSBpdCdzIGEgY29kZSByZXZpZXcsIHNwZWNpZmljYWxseSBldmFsdWF0aW5nIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoZSBzZXZlcml0eSBpcyBsb3csIGFzIGl0J3MgYSBkZWZlbnNpdmUgcmV2aWV3LlxuXG5GaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZS4gYGdldF9scnV2ZWMoKWAgaXMgbW92ZWQgYW5kIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbi4gSSdsbCBmb2N1cyBvbiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYmVjYXVzZSBpdCdzIG5ldy4gIEkgc2VlIHRoYXQgaXQgdGFrZXMgYG1lbWNnYCwgYG5pZGAsIGFuZCBhIGBzY2FuX2NvbnRyb2xgIHN0cnVjdHVyZSAoYHNjYCkgYXMgaW5wdXQuICBJbnNpZGUsIGl0IGdldHMgdGhlIGBscnV2ZWNgIGFuZCBjYWxjdWxhdGVzIGBhbm9uX3BhZ2VzYCBhbmQgYHN3YXBjYWNoZWAuIEl0IHJldHVybnMgYSBib29sZWFuIGJhc2VkIG9uIGEgY29tcGFyaXNvbiBiZXR3ZWVuIGBzd2FwY2FjaGVgIGFuZCBhIHZhbHVlIGRlcml2ZWQgZnJvbSBgYW5vbl9wYWdlc2AuIFRoaXMgbG9va3MgbGlrZSBzb21lIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGhldXJpc3RpYyB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHRocm90dGxlIGFub255bW91cyBwYWdlIHJlY2xhaW0gYmFzZWQgb24gc3dhcCBjYWNoZSBsZXZlbHMgYW5kIElPIGNvbnN0cmFpbnRzLlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gIFRoZSBjb2RlIGNoZWNrcyBpZiBgc2NgIGlzIE5VTEwuIGBscnV2ZWNgIGlzIGFzc2lnbmVkIHRoZSByZXR1cm4gb2YgYGdldF9scnV2ZWMoKWAsIHdoaWNoIGxvb2tzIHNhZmUuICBgYW5vbl9wYWdlc2AgYW5kIGBzd2FwY2FjaGVgIGFyZSBzY2FsYXIgdmFyaWFibGVzIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgY2FsbHMgdG8gYGxydXZlY19wYWdlX3N0YXRlKClgLiBUaGUgY2FsY3VsYXRpb24gaXMgYSBwdXJlIGludGVnZXIgY2FsY3VsYXRpb24uICBObyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGhlcmUsIG5vIGRpcmVjdCBtZW1vcnkgYWNjZXNzIHRvIHVzZXItc3BhY2UsIG5vIHN0cnVjdCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCwgbm8gcG90ZW50aWFsIGZvciBpbmZvIGxlYWtzIG9yIHBhZGRpbmcgbGVha3MgZnJvbSB0aGUgbG9va3Mgb2YgaXQuIEV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgc2NvcGVkLiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncyBhdCBhbGwuXG5cblRvIGJlIGV4dHJhIHRob3JvdWdoLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGNhbGxlcnMgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIEknbGwgcnVuIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLCBidXQgYmFzZWQgb24gdGhlIGNvZGUgaXRzZWxmLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhbmQgbG9jYWxpemVkIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTm8gS01TQU4gZmxhZ3Mgc2VlbSBhcHBsaWNhYmxlIGhlcmUuIEl0J3MgbGlrZWx5IEtBU0FOIGlzIGFscmVhZHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLCBhbmQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgdGhlIGNvZGUgZG9lcyBub3Qgc2VlbSB0byBoYXZlIGFueSBvZiB0aGUgaXNzdWVzIEtNU0FOIGRlYWxzIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjo1Ny4zNTc2NDk4NDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRcXHRpZiAoc2MgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZW5vX2RlbW90aW9uKVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdkYXQsIFxcdTAwMjZhbGxvd2VkX21hc2spO1xcbiAzMzQ6XFx0XFx0aWYgKG5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzaykpXFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qIEZpbHRlciBvdXQgbm9kZXMgdGhhdCBhcmUgbm90IGluIGNncm91cCdzIG1lbXNfYWxsb3dlZC4gKi9cXG4gMzM4OlxcdFxcdG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChtZW1jZywgXFx1MDAyNmFsbG93ZWRfbWFzayk7XFxuIDMzOTpcXHRcXHRyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4gMzQzOlxcdHtcXG4gMzQ0OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiAzNDc6XFx0XFx0aWYgKG1lbWNnKSB7XFxuIDM0ODpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlYztcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cXG4gMzUxOlxcdFxcdFxcdGlmICghbHJ1dmVjLVxcdTAwM2VwZ2RhdClcXG4gMzUyOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlcGdkYXQgPSBwZ2RhdDtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuIGxydXZlYztcXG4gMzU1OlxcdFxcdH1cXG4gMzU2OlxcdCNlbmRpZlxcbiAzNTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRyZXR1cm4gXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYztcXG4gMzYwOlxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gMzYzOlxcdFxcdFxcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiAzNjQ6XFx0e1xcbiAzNjU6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG4gMzY2OlxcdFxcdHVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRpZiAoIXNjIHx8IChzYy1cXHUwMDNlZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9JTykpXFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4gMzcyOlxcdFxcdFxcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XFxuIDM3MzpcXHRcXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XFxuIDM3NDpcXHRcXG4gMzc1OlxcdFxcdHJldHVybiBzd2FwY2FjaGUgXFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcXHUwMDNlXFx1MDAzZSA2LCBTV0FQX0NMVVNURVJfTUFYKTtcXG4gMzc2OlxcdH1cXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAzNzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbiAzODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdGlmIChtZW1jZyA9PSBOVUxMKSB7XFxuIDM4MzpcXHRcXHRcXHQvKlxcbiAzODQ6XFx0XFx0XFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxcbiAzODU6XFx0XFx0XFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbiAzODY6XFx0XFx0XFx0ICovXFxuIDM4NzpcXHRcXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gMzg4OlxcdFxcdFxcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxcbiAzODk6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDM5MDpcXHRcXHR9IGVsc2Uge1xcbiAzOTE6XFx0XFx0XFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xcbiAzOTI6XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiAzOTM6XFx0XFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIDM5NDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzk1OlxcdFxcdH1cXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0LypcXG4gMzk4OlxcdFxcdCAqIFRoZSBwYWdlIGNhbiBub3QgYmUgc3dhcHBlZC5cXG4gMzk5OlxcdFxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjU3LjM1ODA4MjE4N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM1NzY0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBwYXRjaCBvdmVyLCBhbmQgaG9uZXN0bHksIGl0J3MgcHJldHR5IGNsZWFuIGFuZCBkaXJlY3QuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgbG9jYWxpemVkIGFuZCBzZW5zaWJsZS4gSXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgcmVhcnJhbmdpbmcgdGhlIGBnZXRfbHJ1dmVjKClgIGhlbHBlciB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggbWFrZXMgaXQgbW9yZSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBmaW5lLiBUaGUgcmVhbCBtZWF0IG9mIGl0IGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBmdW5jdGlvbidzIGpvYiBpcyB0byBjaGVjayBpZiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byBhbm9ueW1vdXMgcGFnZXMsIGJ1dCBvbmx5IGlmIHdlJ3JlICpub3QqIGRlYWxpbmcgd2l0aCBkaXJlY3QgSS9PLCBqdWRnaW5nIGJ5IHRoZSBgIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pYCBjaGVjay4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlbiB0aGUgcGF0Y2gganVzdCBjYWxscyB0aGlzIG5ldyBmdW5jdGlvbiB3aXRoaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuXG5cbkNyaXRpY2FsbHksIHRoZXJlIGFyZSBubyByZWQgZmxhZ3MgaGVyZSwgbm90aGluZyB0aGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb25cIiBvciBcImRhdGEgbGVha1wiLiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vdGhpbmcgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgcmVhZCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGVzIHdpdGhpbiB0aGUgbmV3IGZ1bmN0aW9uIGFyZSBhbGwgbG9jYWwgYW5kIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHdoaWNoIGlzIGV4Y2VsbGVudC4gTm8gbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnMgb3IgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIHRoYXQganVtcCBvdXQgYXQgbWUuXG5cbkdpdmVuIHRoZSBzaW1wbGljaXR5IGFuZCB0aGUgZm9jdXNlZCBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgSSBkb24ndCBzZWUgYW55IG5lZWQgZm9yIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBjb25maWd1cmF0aW9ucyBzaG91bGQgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB2ZXJ5IHRhcmdldGVkIGNoYW5nZXMgd2l0aCBtaW5pbWFsIGNvbXBsZXhpdHksIGFuZCB0aGUgZXhpc3RpbmcgY2hlY2tzLCBjb21iaW5lZCB3aXRoIHRoZSBsYWNrIG9mIGFueSBzaWduaWZpY2FudCBtZW1vcnkgbWFuYWdlbWVudCBvciBzZWN1cml0eSBjb25jZXJucywgcmVuZGVycyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3OCwiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMzowMS4zOTM4NDk5NjFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGFub255bW91cyBwYWdlIHJlY2xhaW0gZGVjaXNpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgdGhlIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBoZWxwZXIgYW5kIGludm9raW5nIGl0IGZyb20gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIFRvIHN1cHBvcnQgdGhpcywgYGdldF9scnV2ZWMoKWAgaXMgcmVsb2NhdGVkIGVhcmxpZXIgaW4gdGhlIGZpbGUuXFxuXFxuQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgLCBgbHJ1dmVjYCkgYXJlIGltbWVkaWF0ZWx5IGFuZCBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIGtlcm5lbCBzdGF0ZSBmdW5jdGlvbnMgKGBnZXRfbHJ1dmVjKClgIGFuZCBgbHJ1dmVjX3BhZ2Vfc3RhdGUoKWApLiBUaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG8gbm90IG1vZGlmeSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcsIGRvIG5vdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY3Jvc3Mga2VybmVsL3VzZXIgYm91bmRhcmllcyAoZS5nLiB2aWEgY29weV90b191c2VyIG9yIG5ldGxpbmspLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXFxuXFxuQW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgc3RydWN0IGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9uIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHRoZSBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgaGVscGVyIGFuZCBpbnZva2luZyBpdCBmcm9tIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLiBUbyBzdXBwb3J0IHRoaXMsIGBnZXRfbHJ1dmVjKClgIGlzIHJlbG9jYXRlZCBlYXJsaWVyIGluIHRoZSBmaWxlLlxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYGFub25fcGFnZXNgLCBgc3dhcGNhY2hlYCwgYGxydXZlY2ApIGFyZSBpbW1lZGlhdGVseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBrZXJuZWwgc3RhdGUgZnVuY3Rpb25zIChgZ2V0X2xydXZlYygpYCBhbmQgYGxydXZlY19wYWdlX3N0YXRlKClgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvIG5vdCBtb2RpZnkgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLCBkbyBub3QgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgYWNyb3NzIGtlcm5lbC91c2VyIGJvdW5kYXJpZXMgKGUuZy4gdmlhIGNvcHlfdG9fdXNlciBvciBuZXRsaW5rKSwgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxcblxcbkFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBpbnZhbGlkIHN0cnVjdCBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnIGNvbmZpZ3VyYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 04:51:23 +0000 UTC FinishedAt: 2026-09-04 05:13:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "49c067a6-e51f-4912-8631-337644bd7fcb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "reclaimable_anon_is_low", "can_reclaim_anon_pages", "get_lruvec", "get_scan_count", "zone_reclaimable_pages", "shrink_lruvec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9scnV2ZWMmIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbiBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGhlbHBlciBhbmQgaW52b2tpbmcgaXQgZnJvbSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVG8gc3VwcG9ydCB0aGlzLCBgZ2V0X2xydXZlYygpYCBpcyByZWxvY2F0ZWQgZWFybGllciBpbiB0aGUgZmlsZS5cblxuQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgLCBgbHJ1dmVjYCkgYXJlIGltbWVkaWF0ZWx5IGFuZCBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIGtlcm5lbCBzdGF0ZSBmdW5jdGlvbnMgKGBnZXRfbHJ1dmVjKClgIGFuZCBgbHJ1dmVjX3BhZ2Vfc3RhdGUoKWApLiBUaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG8gbm90IG1vZGlmeSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcsIGRvIG5vdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY3Jvc3Mga2VybmVsL3VzZXIgYm91bmRhcmllcyAoZS5nLiB2aWEgY29weV90b191c2VyIG9yIG5ldGxpbmspLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBpbnZhbGlkIHN0cnVjdCBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnIGNvbmZpZ3VyYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTA3Zjk1N2ZiODE1ZDEwNmM3MDcxNWY4ZGNkODgzMGVjYjliODY2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MTE6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTMzOSw2ICYjNDM7MzM5LDQyIEBAIHN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO1x0aWYgKG1lbWNnKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqL1xuJiM0MztcdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4mIzQzO1x0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBscnV2ZWM7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzYyB8fCAoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0YW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MztcbiYjNDM7XHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4mIzQzO1x0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5AQCAtMzQ4LDExICYjNDM7Mzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxuIFx0XHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4gXHRcdCAqL1xuLVx0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMClcbiYjNDM7XHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovXG4tXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMClcbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTI2NzQsMjYgJiM0MzsyNzEyLDYgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxuICNkZWZpbmUgZ2V0X21lbWNnX2dlbihzZXEpXHQoKHNlcSkgJSBNRU1DR19OUl9HRU5TKVxuICNkZWZpbmUgZ2V0X21lbWNnX2JpbihiaW4pXHQoKGJpbikgJSBNRU1DR19OUl9CSU5TKVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi17XG4tXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG4tXG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0aWYgKG1lbWNnKSB7XG4tXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IFx1MDAyNm1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlbHJ1dmVjO1xuLVxuLVx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqL1xuLVx0XHRpZiAoIWxydXZlYy1cdTAwM2VwZ2RhdClcbi1cdFx0XHRscnV2ZWMtXHUwMDNlcGdkYXQgPSBwZ2RhdDtcbi1cbi1cdFx0cmV0dXJuIGxydXZlYztcbi1cdH1cbi0jZW5kaWZcbi1cdFZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKTtcbi1cbi1cdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbi19XG4tXG4gc3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9scnV2ZWMmIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTA3Zjk1N2ZiODE1ZDEwNmM3MDcxNWY4ZGNkODgzMGVjYjliODY2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDU6MTE6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDU2NzA4ZDFkMmRmZDUuLjE5MmJkMDk4MDEyMTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0zMzksNiAmIzQzOzMzOSw0MiBAQCBzdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAogCXJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiYjNDM7CWlmIChtZW1jZykgewomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gJmFtcDttZW1jZy0mZ3Q7bm9kZWluZm9bbmlkXS0mZ3Q7bHJ1dmVjOwomIzQzOwomIzQzOwkJLyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi8KJiM0MzsJCWlmICghbHJ1dmVjLSZndDtwZ2RhdCkKJiM0MzsJCQlscnV2ZWMtJmd0O3BnZGF0ID0gcGdkYXQ7CiYjNDM7CiYjNDM7CQlyZXR1cm4gbHJ1dmVjOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CVZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTsKJiM0MzsKJiM0MzsJaWYgKCFzYyB8fCAoc2MtJmd0O2dmcF9tYXNrICZhbXA7IF9fR0ZQX0lPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJYW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCSAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7CiYjNDM7CXN3YXBjYWNoZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfU1dBUENBQ0hFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN3YXBjYWNoZSAmbHQ7IG1pbihhbm9uX3BhZ2VzICZndDsmZ3Q7IDYsIFNXQVBfQ0xVU1RFUl9NQVgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQpAQCAtMzQ4LDExICYjNDM7Mzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZQogCQkgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/CiAJCSAqLwotCQlpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDApCiYjNDM7CQlpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkJICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9IGVsc2UgewogCQkvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovCi0JCWlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSAmZ3Q7IDApCiYjNDM7CQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0yNjc0LDI2ICYjNDM7MjcxMiw2IEBAIHN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZCkKICNkZWZpbmUgZ2V0X21lbWNnX2dlbihzZXEpCSgoc2VxKSAlIE1FTUNHX05SX0dFTlMpCiAjZGVmaW5lIGdldF9tZW1jZ19iaW4oYmluKQkoKGJpbikgJSBNRU1DR19OUl9CSU5TKQogCi1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCi17Ci0Jc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwotCi0jaWZkZWYgQ09ORklHX01FTUNHCi0JaWYgKG1lbWNnKSB7Ci0JCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9ICZhbXA7bWVtY2ctJmd0O25vZGVpbmZvW25pZF0tJmd0O2xydXZlYzsKLQotCQkvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqLwotCQlpZiAoIWxydXZlYy0mZ3Q7cGdkYXQpCi0JCQlscnV2ZWMtJmd0O3BnZGF0ID0gcGdkYXQ7Ci0KLQkJcmV0dXJuIGxydXZlYzsKLQl9Ci0jZW5kaWYKLQlWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7Ci0KLQlyZXR1cm4gJmFtcDtwZ2RhdC0mZ3Q7X19scnV2ZWM7Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZNc2NhbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIG1ha2luZyBzb21lIHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGFub255bW91cyBwYWdlIHJlY2xhbWF0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW4uCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyYWwgc2hpZnRzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIEkga25vdyBpbnRpbWF0ZWx5LCBpcyBjZW50cmFsIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcGFnZSByZWNsYWltIHByb2Nlc3Nlcy4gSXQmIzM5O3Mgc2ltcGx5IHJlb3JnYW5pemluZyBgZ2V0X2xydXZlYygpYCDigJMgbW92aW5nIGl0IGVhcmxpZXIgaW4gdGhlIGZpbGUuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmU7IHRoaXMgY291bGQgYmUgYSBtaW5vciByZWZhY3RvcmluZyBmb3IgcmVhZGFiaWxpdHkgb3IgcG9zc2libHkgdG8gZmFjaWxpdGF0ZSBhIGZ1dHVyZSBjaGFuZ2UuCgpUaGUgbWVhdCBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb3JlIGdyYW51bGFyIGNoZWNrIHJlbGF0ZWQgdG8gdGhlIGF2YWlsYWJpbGl0eSBvciBwb3RlbnRpYWwgc2NhcmNpdHkgb2YgcmVjbGFpbWFibGUgYW5vbnltb3VzIHBhZ2VzLiBUaGVuLCBsb29raW5nIGF0IHRoZSBjYWxsIHRvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgIGlzIGtleS4KClRoZSBjcml0aWNhbCBjaGFuZ2UgbGllcyB3aXRoaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIEl0IGFwcGVhcnMgd2UmIzM5O3JlIGFkZGluZyBhbiBhZGRpdGlvbmFsIGNvbmRpdGlvbjogYCZhbXA7JmFtcDsgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKWAgd2hlbiBlaXRoZXIgdGhlIGdsb2JhbCBzd2FwIHVzYWdlIG9yIHRoZSBtZW1vcnkgY2dyb3VwIHN3YXAgdXNhZ2UgaXMgZ3JlYXRlciB0aGFuIHplcm8uIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHBpZWNlLiBJdCBpbmRpY2F0ZXMgdGhhdCB3aGVuIHN3YXAgaXMgaW4gdXNlIChvciBwb3RlbnRpYWxseSBjbG9zZSB0byBiZWluZyB1c2VkKSwgdGhlIG5ldyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uJiMzOTtzIHJldHVybiB2YWx1ZSB3aWxsIGVmZmVjdCBwYWdlIHJlY2xhaW0uIFRoZSBzeXN0ZW0gd2lsbCAqbm90KiByZWNsYWltIGFub255bW91cyBwYWdlcyBpZiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgcmV0dXJucyB0cnVlLgoKTm93LCBteSBtaW5kIGdvZXMgdG8gdGhlIGltcGFjdC4gVGhpcyBzdWdnZXN0cyBhIG1vcmUgY2F1dGlvdXMgYXBwcm9hY2ggdG8gYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSB3aGVuIHN3YXAgaXMgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgd2l0aGluIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBhbmQgaG93IGl0IGRldGVybWluZXMgJiMzNDtsb3cmIzM0OyByZWNsYWltYWJsZSBhbm9uIHBhZ2VzLgoKVG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgZWZmZWN0LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZmluZCB3aGVyZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGBtbS92bXNjYW4uY2AgY29udGV4dC4gSSYjMzk7bGwgZWl0aGVyIGdyZXAgZm9yIGl0cyB1c2FnZXMgb3Igc2ltcGx5IHJlYWQgdGhyb3VnaCB0aGUgZmlsZSB0byBpZGVudGlmeSB0aGUgY2FsbCBzaXRlcyBhbmQgaG93IHRoaXMgY2hhbmdlIGNhc2NhZGVzIHRocm91Z2ggdGhlIHNjYW5uaW5nIHByb2Nlc3MuIFRoaXMgd2lsbCBsZXQgbWUgYXNzZXNzIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhbl9yZWNsYWltX2Fub25fcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0zNjI9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0zNzctXG5tbS92bXNjYW4uYzozNzg6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtMzc5LVx0XHRcdFx0XHQgIGludCBuaWQsXG4tLVxubW0vdm1zY2FuLmM9NDEwPXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS92bXNjYW4uYy00MTUtXHRcdHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKTtcbm1tL3Ztc2Nhbi5jOjQxNjpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHpvbmVfdG9fbmlkKHpvbmUpLCBOVUxMKSlcbm1tL3Ztc2Nhbi5jLTQxNy1cdFx0bnIgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pICYjNDM7XG4tLVxubW0vdm1zY2FuLmM9MjUzMT1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI1NDItXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG5tbS92bXNjYW4uYzoyNTQzOlx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG5tbS92bXNjYW4uYy0yNTQ0LVx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG4tLVxubW0vdm1zY2FuLmM9NDA3MD1zdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MDgyLVx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NDA4MzpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQwODQtXHRcdHJlY2xhaW1hYmxlICYjNDM7PSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xuLS1cbm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNjA3OC1cdGluYWN0aXZlX2xydV9wYWdlcyA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XG5tbS92bXNjYW4uYzo2MDc5Olx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxubW0vdm1zY2FuLmMtNjA4MC1cdFx0aW5hY3RpdmVfbHJ1X3BhZ2VzICYjNDM7PSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEFub255bW91cyBQYWdlIFJlY2xhbWF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgbWVtb3J5IGlzc3VlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgbXkgYmVhcmluZ3MgaW4gYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZHJpbGwgZG93biBhcm91bmQgdGhlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBmdW5jdGlvbiBhbmQgdGhlIHdheSBgZ2V0X3NjYW5fY291bnRgIGlzIGhhbmRsZWQuIE15IGh1bmNoIGlzIHRoYXQgdGhlIGxvZ2ljIGdvdmVybmluZyBhbm9ueW1vdXMgcGFnZSByZWNsYW1hdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBoZXJlIOKAkyB3aGVuIGFyZSB3ZSBhY3R1YWxseSBjaG9vc2luZyB0byByZWNsYWltIGFub24gcGFnZXMsIGFuZCBob3cgYXJlIHdlIGRldGVybWluaW5nICpob3cgbXVjaCogdG8gcmVjbGFpbT8gQXJlIHdlIGJlaW5nIHRvbyBhZ2dyZXNzaXZlLCB0b28gY29uc2VydmF0aXZlLCBvciBpcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBhbWlzcyBpbiB0aGUgYWNjb3VudGluZz8gVGltZSB0byB0cmFjZSB0aGUgY29kZSBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHR9XG4gMzQxOlx0XG4gMzQyOlx0c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIDM0MzpcdHtcbiAzNDQ6XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbiAzNDU6XHRcbiAzNDY6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gMzQ3Olx0XHRpZiAobWVtY2cpIHtcbiAzNDg6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXHUwMDI2bWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWM7XG4gMzQ5Olx0XG4gMzUwOlx0XHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXG4gMzUxOlx0XHRcdGlmICghbHJ1dmVjLVx1MDAzZXBnZGF0KVxuIDM1MjpcdFx0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuIDM1MzpcdFxuIDM1NDpcdFx0XHRyZXR1cm4gbHJ1dmVjO1xuIDM1NTpcdFx0fVxuIDM1NjpcdCNlbmRpZlxuIDM1NzpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuIDM1ODpcdFxuIDM1OTpcdFx0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuIDM2MDpcdH1cbiAzNjE6XHRcbiAzNjI6XHRzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDM2MzpcdFx0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiAzNjQ6XHR7XG4gMzY1Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuIDM2NjpcdFx0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4gMzY3Olx0XG4gMzY4Olx0XHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIDM2OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzcwOlx0XG4gMzcxOlx0XHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuIDM3MjpcdFx0XHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuIDM3MzpcdFx0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xuIDM3NDpcdFxuIDM3NTpcdFx0cmV0dXJuIHN3YXBjYWNoZSBcdTAwM2MgbWluKGFub25fcGFnZXMgXHUwMDNlXHUwMDNlIDYsIFNXQVBfQ0xVU1RFUl9NQVgpO1xuIDM3NjpcdH1cbiAzNzc6XHRcbiAzNzg6XHRzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gMzc5Olx0XHRcdFx0XHRcdCAgaW50IG5pZCxcbiAzODA6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiAzODE6XHR7XG4gMzgyOlx0XHRpZiAobWVtY2cgPT0gTlVMTCkge1xuIDM4MzpcdFx0XHQvKlxuIDM4NDpcdFx0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlXG4gMzg1Olx0XHRcdCAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbiAzODY6XHRcdFx0ICovXG4gMzg3Olx0XHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDM4ODpcdFx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiAzODk6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzOTA6XHRcdH0gZWxzZSB7XG4gMzkxOlx0XHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbiAzOTI6XHRcdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDM5MzpcdFx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiAzOTQ6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzOTU6XHRcdH1cbiAzOTY6XHRcbiAzOTc6XHRcdC8qXG4gMzk4Olx0XHQgKiBUaGUgcGFnZSBjYW4gbm90IGJlIHN3YXBwZWQuXG4gMzk5Olx0XHQgKlxuIDQwMDpcdFx0ICogQ2FuIGl0IGJlIHJlY2xhaW1lZCBmcm9tIHRoaXMgbm9kZSB2aWEgZGVtb3Rpb24/XG4gNDAxOlx0XHQgKi9cbiA0MDI6XHRcdHJldHVybiBjYW5fZGVtb3RlKG5pZCwgc2MsIG1lbWNnKTtcbiA0MDM6XHR9XG4gNDA0Olx0XG4gNDA1Olx0LypcbiA0MDY6XHQgKiBUaGlzIG1pc3NlcyBpc29sYXRlZCBmb2xpb3Mgd2hpY2ggYXJlIG5vdCBhY2NvdW50ZWQgZm9yIHRvIHNhdmUgY291bnRlcnMuXG4gNDA3Olx0ICogQXMgdGhlIGRhdGEgb25seSBkZXRlcm1pbmVzIGlmIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBjb250aW51ZXMsIGl0IGlzXG4gNDA4Olx0ICogbm90IGV4cGVjdGVkIHRoYXQgaXNvbGF0ZWQgZm9saW9zIHdpbGwgYmUgYSBkb21pbmF0aW5nIGZhY3Rvci5cbiA0MDk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc2CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb2RlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggZGVhbHMgd2l0aCBtZW1vcnkgcmVjbGFpbSwgc3dhcHBpbmcsIGFuZCBzY2FuIGJhbGFuY2luZy4gR2l2ZW4gdGhhdCwgaXQmIzM5O3MgcHJldHR5IGxpa2VseSB0aGlzIGFyZWEgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMg4oCTIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIHBvdGVudGlhbGx5IHRoZSBzY2hlZHVsZXIgaWYgcmVjbGFpbSBpcyBpbnZvbHZlZCwgbWF5YmUgZXZlbiBCUEYgaWYgdGhleSYjMzk7cmUgZG9pbmcgc29tZXRoaW5nIGNsZXZlciB3aXRoIHBhZ2UgYWxsb2NhdGlvbi4gWWVwLCBsb29rcyBsaWtlIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlIGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWwgYEZvY3VzU3ltYm9sc2AgZm9yIGZ1enppbmcuIEEga2V5IGZ1bmN0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0Li4uIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYGdldF9zY2FuX2NvdW50YCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YCwgYW5kIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAuIEhtbSwgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhlc2UuCgpXYWl0IGEgc2Vjb25k4oCmIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBpcyBgc3RhdGljIGlubGluZWA/IE9rYXksIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgZnV6emluZyBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuICBTaW1pbGFybHksIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AgaXMgYWxzbyBzdGF0aWMgaW5saW5lLiBUaGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzLCBidXQgaXQmIzM5O3Mgc3RpbGwgd29ydGggaW52ZXN0aWdhdGluZyBpdHMgY2FsbGVycywgYmVjYXVzZSB0aGUgaW5saW5pbmcgbWF5IGJlIGEgZ29vZCBvcHBvcnR1bml0eSBmb3Igc29tZSBpbnRlcmVzdGluZyBtdXRhdGlvbi4gIFdoYXQgYWJvdXQgYGdldF9scnV2ZWNgPyBZdXAsIHRoYXQmIzM5O3MgYWxzbyBzdGF0aWMuIEFscmlnaHQuCgpTbywgSeKAmWxsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgY2FsbGVycyBub3c6IGBnZXRfc2Nhbl9jb3VudGAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YCwgYW5kIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgYW5kIHRoZW4gZXZhbHVhdGUgb3RoZXIgbm9uLXViaXF1aXRvdXMgY2FsbGVycyBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGZ1enogdGFyZ2V0IG5lZWRzIHRvIGZvY3VzIG9uIHRob3NlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfc2Nhbl9jb3VudHx6b25lX3JlY2xhaW1hYmxlX3BhZ2VzfHNldF9pbml0aWFsX3ByaW9yaXR5fHNob3VsZF9jb250aW51ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Mzc4PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00MDktICovXG5tbS92bXNjYW4uYzo0MTA6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxubW0vdm1zY2FuLmMtNDExLXtcbi0tXG5tbS92bXNjYW4uYz01MTg9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNTM1LVx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG5tbS92bXNjYW4uYzo1MzY6XHRcdHJlY2xhaW1hYmxlICYjNDM7PSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpO1xubW0vdm1zY2FuLmMtNTM3LVx0XHR3cml0ZV9wZW5kaW5nICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcbi0tXG5tbS92bXNjYW4uYz0yNDYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0yNTMwLSAqL1xubW0vdm1zY2FuLmM6MjUzMTpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtMjUzMi1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpucilcbi0tXG5tbS92bXNjYW4uYz00MDEyPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwNjktXG5tbS92bXNjYW4uYzo0MDcwOnN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDA3MS17XG4tLVxubW0vdm1zY2FuLmM9NDE1MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxNTgtXG5tbS92bXNjYW4uYzo0MTU5Olx0c2V0X2luaXRpYWxfcHJpb3JpdHkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTQxNjAtXG4tLVxubW0vdm1zY2FuLmM9NTE1ND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNzQtXG5tbS92bXNjYW4uYzo1MTc1Olx0c2V0X2luaXRpYWxfcHJpb3JpdHkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxNzYtXG4tLVxubW0vdm1zY2FuLmM9NTg5ND1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTkxMi1cbm1tL3Ztc2Nhbi5jOjU5MTM6XHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XG5tbS92bXNjYW4uYy01OTE0LVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NTUtXHRcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxubW0vdm1zY2FuLmM6NTk1NjpcdFx0ICogcHJvcG9ydGlvbmFsbHkgd2hhdCB3YXMgcmVxdWVzdGVkIGJ5IGdldF9zY2FuX2NvdW50KCkuIFdlXG5tbS92bXNjYW4uYy01OTU3LVx0XHQgKiBzdG9wIHJlY2xhaW1pbmcgb25lIExSVSBhbmQgcmVkdWNlIHRoZSBhbW91bnQgc2Nhbm5pbmdcbi0tXG5tbS92bXNjYW4uYz02MDE2PXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDI3LSAqIFJlY2xhaW0vY29tcGFjdGlvbiBpcyB1c2VkIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuIEl0IHJlY2xhaW1zXG5tbS92bXNjYW4uYzo2MDI4OiAqIG9yZGVyLTAgcGFnZXMgYmVmb3JlIGNvbXBhY3RpbmcgdGhlIHpvbmUuIHNob3VsZF9jb250aW51ZV9yZWNsYWltKCkgcmV0dXJuc1xubW0vdm1zY2FuLmMtNjAyOS0gKiB0cnVlIGlmIG1vcmUgcGFnZXMgc2hvdWxkIGJlIHJlY2xhaW1lZCBzdWNoIHRoYXQgd2hlbiB0aGUgcGFnZSBhbGxvY2F0b3Jcbi0tXG5tbS92bXNjYW4uYy02MDMyLSAqL1xubW0vdm1zY2FuLmM6NjAzMzpzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTYwMzQtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLFxuLS1cbm1tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjI2MS1cbm1tL3Ztc2Nhbi5jOjYyNjI6XHRpZiAoc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0ocGdkYXQsIG5yX25vZGVfcmVjbGFpbWVkLCBzYykpXG5tbS92bXNjYW4uYy02MjYzLVx0XHRnb3RvIGFnYWluO1xuLS1cbm1tL3Ztc2Nhbi5jPTYyODI9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fcmVhZHkoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzMDAtXHQgKiBOb3RlIHRoYXQgd2Ugd29uJiMzOTt0IGFjdHVhbGx5IHJlY2xhaW0gdGhlIHdob2xlIGJ1ZmZlciBpbiBvbmUgYXR0ZW1wdFxubW0vdm1zY2FuLmM6NjMwMTpcdCAqIGFzIHRoZSB0YXJnZXQgd2F0ZXJtYXJrIGluIHNob3VsZF9jb250aW51ZV9yZWNsYWltKCkgaXMgbG93ZXIuIEJ1dCBpZlxubW0vdm1zY2FuLmMtNjMwMi1cdCAqIHdlIGFyZSBhbHJlYWR5IGFib3ZlIHRoZSBoaWdoJiM0MztnYXAgd2F0ZXJtYXJrLCBkb24mIzM5O3QgcmVjbGFpbSBhdCBhbGwuXG4tLVxubW0vdm1zY2FuLmM9NjU2OT1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1ODAtXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIFpPTkVfTk9STUFMKSB7XG5tbS92bXNjYW4uYzo2NTgxOlx0XHRpZiAoIXpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgXHUwMDI2XHUwMDI2IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKSlcbm1tL3Ztc2Nhbi5jLTY1ODItXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3ltYm9scyBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgZWZmZWN0aXZlIGtlcm5lbCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZywgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgcmVjbGFpbS4gVGhlIGd1aWRlbGluZXMgZm9yIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGFuZCBpbnN0ZWFkLCBwaW5wb2ludCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFdlJiMzOTtyZSBsb29raW5nIHRvIGF2b2lkIHRoZSBub2lzZSBhbmQgY29uY2VudHJhdGUgb3VyIGVmZm9ydHMuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHM6IGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGdldF9zY2FuX2NvdW50YCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLCBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIGBscnVfZ2VuX2FnZV9ub2RlYCwgYW5kIGBscnVfZ2VuX3Nocmlua19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBob25lIGluIG9uIHRob3NlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBzaW5jZSB0aGF04oCZcyB3aGVyZSB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgc2hvdWxkIGJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGFjY2lkZW50YWxseSBncmFiYmluZyBmdW5jdGlvbnMgdGhhdCBhcmUgKnRvbyogY29tbW9uLgoKTm93LCBJJiMzOTttIGNoZWNraW5nIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgYXBwZWFycyB0byBiZSBhIGNsZWFyIGVudHJ5IHBvaW50IGludG8gem9uZSByZWNsYWltIGxvZ2ljLiBUaGVuIHRoZXJlJiMzOTtzIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYW5kIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAsIHdoaWNoIGFyZSBzdGF0aWMgYnV0IG1heSBiZSBsYXJnZS4gVGhpcyB3aWxsIGJlYXIgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIGFsc28gbm90ZWQgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGFuZCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLCB3aGljaCBhcmUgc3RhdGljIGlubGluZSwgYW5kIHRodXMsIG1pZ2h0IG5vdCBiZSBkaXJlY3RseSB0YXJnZXRhYmxlLCBidXQgYXJlIGRlZmluaXRlbHkgcmVsYXRlZCB0byBhbm9ueW1vdXMgcGFnZSByZWNsYWltLiBJIGFsc28gcmVtZW1iZXIgYGdldF9scnV2ZWNgIGFuZCB3YW50IHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuCgpJIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGxpa2UgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19TV0FQYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBob3cgdGhvc2UgY29uZmlncyBtaWdodCBpbmZsdWVuY2Ugd2hpY2ggY29kZSBwYXRocyBhcmUgYWN0aXZlLiBJIHdpbGwgc2VhcmNoIGZvciB0aGVzZSBzeW1ib2xzIGluIHRoZSBjb25maWdzLgoKSW4gc2hvcnQsIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZm9jdXNlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBsaWtlbHkgdGFyZ2V0aW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgbGFyZ2VyIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aG9zZSB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gdGhyb3VnaCBzb21lIG5vbi11YmlxdWl0b3VzIGVudHJ5LXBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbnJfc3dhcF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9NDMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfdXNhZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHN3YXApXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTQ0MS1cdFx0aWYgKHN3YXApXG5tbS9tZW1jb250cm9sLXYxLmM6NDQyOlx0XHRcdHZhbCAmIzQzOz0gdG90YWxfc3dhcF9wYWdlcyAtIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5tbS9tZW1jb250cm9sLXYxLmMtNDQzLVx0fSBlbHNlIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIwOT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjUzLVx0ICogbmVlZCBlYXJsaWVyIGFjY2VzcywgYW5kIHRoZSB3b3JraW5nc2V0IGNvZGUgcmVsaWVzIG9uIHRoZVxubW0vbWVtY29udHJvbC5jOjQyNTQ6XHQgKiBjZ3JvdXAgdHJlZSBsaW5rYWdlIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKCkpLiBTb1xubW0vbWVtY29udHJvbC5jLTQyNTUtXHQgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjMyPXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY1MC1cbm1tL21lbWNvbnRyb2wuYzo1NjUxOmxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNTY1Mi17XG5tbS9tZW1jb250cm9sLmM6NTY1MzpcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5tbS9tZW1jb250cm9sLmMtNTY1NC1cbi0tXG5tbS9zd2FwX3N0YXRlLmM9Njg9dm9pZCBzaG93X3N3YXBfY2FjaGVfaW5mbyh2b2lkKVxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MC1cdHByaW50ayhcJiMzNDslbHUgcGFnZXMgaW4gc3dhcCBjYWNoZVxcblwmIzM0OywgdG90YWxfc3dhcGNhY2hlX3BhZ2VzKCkpO1xubW0vc3dhcF9zdGF0ZS5jOjcxOlx0cHJpbnRrKFwmIzM0O0ZyZWUgc3dhcCAgPSAlbGRrQlxcblwmIzM0OywgSyhnZXRfbnJfc3dhcF9wYWdlcygpKSk7XG5tbS9zd2FwX3N0YXRlLmMtNzItXHRwcmludGsoXCYjMzQ7VG90YWwgc3dhcCA9ICVsdWtCXFxuXCYjMzQ7LCBLKHRvdGFsX3N3YXBfcGFnZXMpKTtcbi0tXG5tbS92bXNjYW4uYz0zNzg9c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4Ni1cdFx0ICovXG5tbS92bXNjYW4uYzozODc6XHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMzg4LVx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbi0tXG5tbS92bXNjYW4uYy0zOTEtXHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbm1tL3Ztc2Nhbi5jOjM5MjpcdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMzkzLVx0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbi0tXG5tbS92bXNjYW4uYz0yNzE1PXN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNzIzLVx0aWYgKCFjYW5fZGVtb3RlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjLCBtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYzoyNzI0Olx0ICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzYyBNSU5fTFJVX0JBVENIKVxubW0vdm1zY2FuLmMtMjcyNS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTUyNS1cdH1cbm1tL3dvcmtpbmdzZXQuYzo1MjY6XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhldmljdGlvbl9tZW1jZykgXHUwMDNlIDApIHtcbm1tL3dvcmtpbmdzZXQuYy01MjctXHRcdHdvcmtpbmdzZXRfc2l6ZSAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGUoZXZpY3Rpb25fbHJ1dmVjLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU3dhcCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGdldF9ucl9zd2FwX3BhZ2VzYCBpcyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfU1dBUGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGNvcmUga2VybmVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIHdoZXRoZXIgdGhlIHN5c3RlbSBhY3R1YWxseSBoYXMgc3dhcCBlbmFibGVkLiBJZiBpdCBpc24mIzM5O3QsIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgdGhhdCBoYXMgbWUgd29uZGVyaW5nIGlmIGl0JiMzOTtzIHNhZmUgdG8gdXNlIGluIGNvbnRleHRzIHdoZXJlIHN3YXAgaXNuJiMzOTt0LiBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZGVwZW5kZW5jZSBvbiB0aGUgY29uZmlnIGZsYWcsIGlzIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlLCByaWdodCBub3chIEkmIzM5O2xsIGdvIGNoZWNrIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbnJfc3dhcF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTQyNT1zdGF0aWMgaW5saW5lIGJvb2wgdm1fc3dhcF9mdWxsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDI5LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDMwOnN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfbnJfc3dhcF9wYWdlcyh2b2lkKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDMxLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00ODM9c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDg2LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDg3OiNkZWZpbmUgZ2V0X25yX3N3YXBfcGFnZXMoKVx0XHRcdDBMXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00ODgtI2RlZmluZSB0b3RhbF9zd2FwX3BhZ2VzXHRcdFx0MExcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD01ODU9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTU5MS1cbmluY2x1ZGUvbGludXgvc3dhcC5oOjU5MjpleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01OTMtZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA0LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NjA1OnN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvc3dhcC5oLTYwNi17XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo2MDc6XHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTYwOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGBnZXRfbnJfc3dhcF9wYWdlc2AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgYGdldF9ucl9zd2FwX3BhZ2VzYCBpbiB0aGUga2VybmVsLiBNeSBiZXN0IHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgNDIwLTQ5MCwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgbGlrZWx5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGd1YXJkcyB3aWxsIGJlLiBUaGlzIHJhbmdlIHNob3VsZCBjb250YWluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpdHNlbGYgYW5kIGFueSBgI2lmZGVmYCBvciBgI2lmYCBibG9ja3MgdGhhdCBjb250cm9sIHdoZXRoZXIgb3IgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byByZWxhdGUgdG8gc29tZSBzd2FwIGZlYXR1cmUgb3Igb3B0aW9uOyBmaW5kaW5nIHRoZSBndWFyZGluZyBtYWNybyB3aWxsIHRlbGwgbWUgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGUgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlIGluIHRoaXMgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdGV4dGVybiBhdG9taWNfbG9uZ190IG5yX3N3YXBfcGFnZXM7XG4gNDIxOlx0ZXh0ZXJuIGxvbmcgdG90YWxfc3dhcF9wYWdlcztcbiA0MjI6XHRleHRlcm4gYXRvbWljX3QgbnJfcm90YXRlX3N3YXA7XG4gNDIzOlx0XG4gNDI0Olx0LyogU3dhcCA1MCUgZnVsbD8gUmVsZWFzZSBzd2FwY2FjaGUgbW9yZSBhZ2dyZXNzaXZlbHkuLiAqL1xuIDQyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9zd2FwX2Z1bGwodm9pZClcbiA0MjY6XHR7XG4gNDI3Olx0XHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZucl9zd2FwX3BhZ2VzKSAqIDIgXHUwMDNjIHRvdGFsX3N3YXBfcGFnZXM7XG4gNDI4Olx0fVxuIDQyOTpcdFxuIDQzMDpcdHN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfbnJfc3dhcF9wYWdlcyh2b2lkKVxuIDQzMTpcdHtcbiA0MzI6XHRcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5yX3N3YXBfcGFnZXMpO1xuIDQzMzpcdH1cbiA0MzQ6XHRcbiA0MzU6XHRleHRlcm4gdm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqKTtcbiA0MzY6XHRleHRlcm4gaW50IHBpbl9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpO1xuIDQzNzpcdGV4dGVybiB2b2lkIHVucGluX2hpYmVybmF0aW9uX3N3YXBfdHlwZShpbnQgdHlwZSk7XG4gNDM4Olx0ZXh0ZXJuIGludCBmaW5kX2hpYmVybmF0aW9uX3N3YXBfdHlwZShkZXZfdCBkZXZpY2UsIHNlY3Rvcl90IG9mZnNldCk7XG4gNDM5Olx0aW50IGZpbmRfZmlyc3Rfc3dhcChkZXZfdCAqZGV2aWNlKTtcbiA0NDA6XHRleHRlcm4gdW5zaWduZWQgaW50IGNvdW50X3N3YXBfcGFnZXMoaW50LCBpbnQpO1xuIDQ0MTpcdGV4dGVybiBzZWN0b3JfdCBzd2FwZGV2X2Jsb2NrKGludCwgcGdvZmZfdCk7XG4gNDQyOlx0ZXh0ZXJuIGludCBfX3N3YXBfY291bnQoc3dwX2VudHJ5X3QgZW50cnkpO1xuIDQ0MzpcdGV4dGVybiBib29sIHN3YXBfZW50cnlfc3dhcHBlZChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NDQ6XHRleHRlcm4gaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpO1xuIDQ0NTpcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvO1xuIDQ0NjpcdGV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NDc6XHRzZWN0b3JfdCBzd2FwX2ZvbGlvX3NlY3RvcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiA0NDg6XHRcbiA0NDk6XHQvKlxuIDQ1MDpcdCAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHN3YXAgc2xvdCByZWZlcmVuY2UgKHN3YXAgZW50cnkpIGFuZCB0aGUgY2FsbGVyXG4gNDUxOlx0ICogZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGlzIG5vIHJhY2UgbW9kaWZpY2F0aW9uIG9mIGl0IChlLmcuLCBQVExcbiA0NTI6XHQgKiBwcm90ZWN0aW5nIHRoZSBzd2FwIGVudHJ5IGluIHBhZ2UgdGFibGU7IHNobWVtJiMzOTtzIGNtcHhjaGcgcHJvdGVjdHMgdFxuIDQ1MzpcdCAqIGhlIHN3YXAgZW50cnkgaW4gc2htZW0gbWFwcGluZyksIHRoZXNlIHR3byBoZWxwZXJzIGJlbG93IGNhbiBiZSB1c2VkXG4gNDU0Olx0ICogdG8gcHV0L2R1cCB0aGUgZW50cmllcyBkaXJlY3RseS5cbiA0NTU6XHQgKlxuIDQ1NjpcdCAqIEFsbCBlbnRyaWVzIG11c3QgYmUgYWxsb2NhdGVkIGJ5IGZvbGlvX2FsbG9jX3N3YXAoKS4gQW5kIHRoZXkgbXVzdCBoYXZlXG4gNDU3Olx0ICogYSBzd2FwIGNvdW50IFx1MDAzZSAxLiBTZWUgY29tbWVudHMgb2YgZm9saW9fKl9zd2FwIGhlbHBlcnMgZm9yIG1vcmUgaW5mby5cbiA0NTg6XHQgKi9cbiA0NTk6XHRpbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NjA6XHR2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xuIDQ2MTpcdFxuIDQ2MjpcdC8qXG4gNDYzOlx0ICogZm9saW9fZnJlZV9zd2FwIHRyaWVzIHRvIGZyZWUgdGhlIHN3YXAgZW50cmllcyBwaW5uZWQgYnkgYSBzd2FwIGNhY2hlXG4gNDY0Olx0ICogZm9saW8sIGl0IGhhcyB0byBiZSBoZXJlIHRvIGJlIGNhbGxlZCBieSBvdGhlciBjb21wb25lbnRzLlxuIDQ2NTpcdCAqL1xuIDQ2NjpcdGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDQ2NzpcdFxuIDQ2ODpcdC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXG4gNDY5Olx0c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbiA0NzA6XHR2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbiA0NzE6XHRcbiA0NzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbiA0NzM6XHR7XG4gNDc0Olx0XHRwZXJjcHVfcmVmX3B1dChcdTAwMjZzaS1cdTAwM2V1c2Vycyk7XG4gNDc1Olx0fVxuIDQ3NjpcdFxuIDQ3NzpcdCNlbHNlIC8qIENPTkZJR19TV0FQICovXG4gNDc4Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIDQ3OTpcdHtcbiA0ODA6XHRcdHJldHVybiBOVUxMO1xuIDQ4MTpcdH1cbiA0ODI6XHRcbiA0ODM6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbiA0ODQ6XHR7XG4gNDg1Olx0fVxuIDQ4NjpcdFxuIDQ4NzpcdCNkZWZpbmUgZ2V0X25yX3N3YXBfcGFnZXMoKVx0XHRcdDBMXG4gNDg4Olx0I2RlZmluZSB0b3RhbF9zd2FwX3BhZ2VzXHRcdFx0MExcbiA0ODk6XHQjZGVmaW5lIHRvdGFsX3N3YXBjYWNoZV9wYWdlcygpXHRcdFx0MFVMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTg4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUuIElmIGBDT05GSUdfU1dBUGAgaXNuJiMzOTt0IHR1cm5lZCBvbiwgdGhlbiBgZ2V0X25yX3N3YXBfcGFnZXMoKWAgaXMgZ29pbmcgdG8gcmV0dXJuIDAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvbmRpdGlvbiBgZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDBgIGlzIGF1dG9tYXRpY2FsbHkgZmFsc2UuIFRoYXQgbWVhbnMgd2UgZG9uJiMzOTt0IGV2ZW4gaGF2ZSB0byB3b3JyeSBhYm91dCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGJlaW5nIGV2YWx1YXRlZCBpbiBlaXRoZXIgdGhlIHN0YW5kYXJkIG9yIG1lbWNnIHNjZW5hcmlvcywgaXQganVzdCBnZXRzIHNraXBwZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKUGx1cywgSSBzZWUgdGhhdCB0aGlzIG5ldyBoZWxwZXIsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGlzIGxvb2tpbmcgYXQgYE5SX1NXQVBDQUNIRWAgYW5kIHRoZW4gY2FsY3VsYXRpbmcgYW5vbiBwYWdlcyByZWxhdGl2ZSB0byB0aGUgc3dhcGNhY2hlLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBwcmVzc3VyZSBjYWxjdWxhdGlvbnMgaGVyZS4KClNvLCB0aGUgd2hvbGUgdGhpbmcgcmVhbGx5IGhpbmdlcyBvbiBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01FTUNHYC4gR290dGEgY29uZmlybSB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgc2V0IGFwcHJvcHJpYXRlbHkuIExldCBtZSB0cmFjayBkb3duIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBJIHJlbWVtYmVyIHNlZWluZyB0aGVtIGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIHNvIGxldCBtZSBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkuIFJpZ2h0LCBgU1dBUGAgYW5kIGBNRU1DR2AgYXJlIGJvdGggaW4gYGluaXQvS2NvbmZpZ2AuIFRpbWUgdG8gY2hlY2sgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgaW5zdGluY3QsIHdoZW4gbmVlZGluZyB0byBmaWd1cmUgb3V0IGhvdyBzd2FwcGluZyBvciBtZW1vcnkgY2dyb3VwIGZlYXR1cmVzIGFyZSBlbmFibGVkIGluIHRoaXMga2VybmVsLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIG9wdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scyBkZWZpbmVkIHRoZXJlLCBtYXliZSBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1NXQVBgIG9yIGBDT05GSUdfTUVNQ0dgLCBvciBwZXJoYXBzIGV2ZW4gbW9yZSBncmFudWxhciBvcHRpb25zIGRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgZmVhdHVyZSYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8sIHVuZGVyc3RhbmQgaG93IHRoZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gRnJvbSB0aGVyZSBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQfGNvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIE1FTUNHIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgaW5pdC9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIG9wdGlvbnMgZm9yIGEgbG90IG9mIGNvcmUga2VybmVsIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCBhbmQgTUVNQ0cgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGV5JiMzOTtkIGJlIGRlY2xhcmVkIHRoZXJlLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byB0aGVpciBkZWZhdWx0IGVuYWJsaW5nLiBIb3BlZnVsbHksIGl0JiMzOTtzIGNsZWFybHkgbGFpZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IHRyZWUgdGhlcmUgYWZmZWN0cyBteSBjdXJyZW50IHByb2JsZW0uIEdvdHRhIG1ha2Ugc3VyZSBJIGFsc28gbG9vayBmb3IgcG90ZW50aWFsIGZlYXR1cmUgZmxhZyBndWFyZHMgaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3NS1cbmluaXQvS2NvbmZpZzoxMDc2OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTEtXG5pbml0L0tjb25maWc6MTA5Mjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk4LVxuaW5pdC9LY29uZmlnOjEwOTk6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU1dBUCBhbmQgTUVNQ0cgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYFNXQVBgIGFuZCBgTUVNQ0dgIGFyZSBjb25maWd1cmVkIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGRlZXBlciBhbmQgZW5zdXJlIEkmIzM5O20gYXdhcmUgb2YgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHJlYWRpbmcgYXJvdW5kIGBTV0FQYCBlbnRyaWVzIGluIGBtbS9LY29uZmlnYCBhbmQsIHNpbWlsYXJseSwgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbnMgaW4gYGluaXQvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhvc2Uga2V5d29yZHMsIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaW50ZXJhY3Qgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtNZW1vcnkgTWFuYWdlbWVudCBvcHRpb25zXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0I1xuICAgNjpcdCMgRm9yIHNvbWUgcmVhc29uIG1pY3JvYmxhemUgYW5kIG5pb3MyIGhhcmQgY29kZSBTV0FQPW4uICBIb3BlZnVsbHkgd2UgY2FuXG4gICA3Olx0IyBhZGQgcHJvcGVyIFNXQVAgc3VwcG9ydCB0byB0aGVtLCBpbiB3aGljaCBjYXNlIHRoaXMgY2FuIGJlIHJlbW92ZS5cbiAgIDg6XHQjXG4gICA5Olx0Y29uZmlnIEFSQ0hfTk9fU1dBUFxuICAxMDpcdFx0Ym9vbFxuICAxMTpcdFxuICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoZSB3ZWVkcyBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4mIzM0OyBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhhdCBnZW5lcmFsIGFyZWEgYXJvdW5kIGxpbmUgMTA3Ni4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgdGhlIGJlaGF2aW9yIHdlJiMzOTtyZSBzZWVpbmcuIFRoaXMgdXN1YWxseSBjb250YWlucyB0aGUgYmFzaWMgZmVhdHVyZXMgb2YgYSBrZXJuZWwsIHNvIEkmIzM5O20gaG9waW5nIHRvIGlkZW50aWZ5IHdoYXQgZmVhdHVyZXMgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3Igd2hhdCBoYXMgcmVjZW50bHkgYmVlbiBtb2RpZmllZCB0byBjYXVzZSB0aGUgY3VycmVudCBpc3N1ZS4gSG9wZWZ1bGx5IHRoYXQgbGluZSB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHByb2JsZW0gYXQgaGFuZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA3MTpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwNzI6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwNzM6XHRcbjEwNzQ6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NTpcdFxuMTA3NjpcdGNvbmZpZyBNRU1DR1xuMTA3NzpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA3ODpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA3OTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODA6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODE6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4MjpcdFx0aGVscFxuMTA4MzpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODY6XHRcdGJvb2xcbjEwODc6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwODg6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwODk6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkwOlx0XHRkZWZhdWx0IHlcbjEwOTE6XHRcbjEwOTI6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTM6XHRcdGJvb2xcbjEwOTQ6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTU6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTY6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTc6XHRcdGRlZmF1bHQgeVxuMTA5ODpcdFxuMTA5OTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMDpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAxOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTAyOlx0XHRkZWZhdWx0IG5cbjExMDM6XHRcdGhlbHBcbjExMDQ6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA1Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA2Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwNzpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMDg6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODA2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBkaWZmIHNob3dzIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBsb29rcyBsaWtlIGBnZXRfbHJ1dmVjYCBoYXMgYmVlbiBtb3ZlZCBhbmQgYSBuZXcgZnVuY3Rpb24sIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGhhcyBiZWVuIGludHJvZHVjZWQuIFRoZSBsYXR0ZXIgYXBwZWFycyB0byBiZSB1c2VkIHdpdGhpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBpcyBkb2luZy4KCkFscmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlIGZvciBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLiBIbW0sIGl0JiMzOTtzIGNhbGN1bGF0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGFub255bW91cyBwYWdlcyBhbmQgc3dhcCBjYWNoZSBwYWdlcywgbGlrZWx5IHRvIGRldGVybWluZSBpZiB3ZSYjMzk7cmUgaW4gYSBsb3ctbWVtb3J5IHNpdHVhdGlvbi4gVGhlIGNvcmUgbG9naWMgaGluZ2VzIG9uIGNvbXBhcmluZyBgc3dhcGNhY2hlYCB0byBhIGZyYWN0aW9uIG9mIGBhbm9uX3BhZ2VzYCBhbmQgYFNXQVBfQ0xVU1RFUl9NQVhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSBhbHdheXMgZGlnIGRlZXBlci4KCk5vdywgYSBjcml0aWNhbCBwb2ludDogaG93IGlzIGBscnV2ZWNgIG9idGFpbmVkPyBBaCwgYGdldF9scnV2ZWNgIGlzIHVzZWQuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvZGUgdXNlcyBgbWVtY2dgIHRvIHNlbGVjdCB0aGUgcmlnaHQgTFJVIHZlY3Rvci4gVGhlcmUmIzM5O3MgYSBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2ssIHdoaWNoIGlzIGV4cGVjdGVkLiBCdXQgSSBzZWUgdGhpcyBgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO2AuIE15IFNwaWRleSBzZW5zZSBpcyB0aW5nbGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBXaGF0IGhhcHBlbnMgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgKmJ1dCogYG1lbWNnYCBpcyBgTlVMTGAsIGFuZCBgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZT8KCldoZW4gdGhlIHN5c3RlbSBydW5zIGdsb2JhbCByZWNsYWltIOKAkyB0aGluayBrc3dhcGQgb3IgZGlyZWN0IHJlY2xhaW0gZm9yIHRoZSB3aG9sZSBtZW1vcnkg4oCTIGBtZW1jZ2AgKndpbGwqIGJlIGBOVUxMYC4gVGhpcyB0cmlnZ2VycyB0aGUgYFZNX1dBUk5fT05fT05DRWAhIEFuZCwgaWYgbWVtb3J5IGNncm91cHMgYXJlIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkICh3aGljaCBpcyB0aGUgZGVmYXVsdCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIG9uIGFuZCBgY2dyb3VwX2Rpc2FibGU9bWVtb3J5YCBpcyBub3QgdXNlZCBhdCBib290KSwgYCFtZW1fY2dyb3VwX2Rpc2FibGVkKClgIHdpbGwgKmFsd2F5cyogYmUgdHJ1ZS4KClNvLCB0aGUgd2FybmluZyB3aWxsIGZpcmUgZHVyaW5nIGdsb2JhbCByZWNsYWltLCB3aGljaCBpcyBhIG1ham9yIHJlZCBmbGFnISBQcmV2aW91c2x5LCBgZ2V0X2xydXZlY2Agd2FzIG9ubHkgY2FsbGVkIGluIGNvbnRleHRzIHdoZXJlIGBtZW1jZ2Agd2FzIHByb3Blcmx5IGhhbmRsZWQgb3IgY2hlY2tlZCwgbGlrZSBpbiBtdWx0aS1nZW4gTFJVLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgZ2V0X2xydXZlY2Agd2FzICpwcmV2aW91c2x5KiBjYWxsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuIFRoaXMgbG9va3MgbGlrZSBhIHJlZ3Jlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0zMjI9c3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0zNDEtXG5tbS92bXNjYW4uYzozNDI6c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtMzQzLXtcbi0tXG5tbS92bXNjYW4uYz0zNjI9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0zNjQte1xubW0vdm1zY2FuLmM6MzY1Olx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTM2Ni1cdHVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlO1xuLS1cbm1tL3Ztc2Nhbi5jPTIzMjE9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjMyMy1cdHVuc2lnbmVkIGxvbmcgZmlsZTtcbm1tL3Ztc2Nhbi5jOjIzMjQ6XHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xubW0vdm1zY2FuLmMtMjMyNS1cbi0tXG5tbS92bXNjYW4uYy0yMzI4LVxubW0vdm1zY2FuLmM6MjMyOTpcdHRhcmdldF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgcGdkYXQpO1xubW0vdm1zY2FuLmMtMjMzMC1cbi0tXG5tbS92bXNjYW4uYy0yMzQwLVx0ICovXG5tbS92bXNjYW4uYzoyMzQxOlx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbm1tL3Ztc2Nhbi5jOjIzNDI6XHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbm1tL3Ztc2Nhbi5jOjIzNDM6XHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbm1tL3Ztc2Nhbi5jOjIzNDQ6XHRzcGluX3VubG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG5tbS92bXNjYW4uYy0yMzQ1LVxuLS1cbm1tL3Ztc2Nhbi5jLTIzNTctXHRcdCAqL1xubW0vdm1zY2FuLmM6MjM1ODpcdFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxubW0vdm1zY2FuLmMtMjM1OS1cdFx0XHRcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTik7XG5tbS92bXNjYW4uYzoyMzYwOlx0XHRpZiAocmVmYXVsdHMgIT0gdGFyZ2V0X2xydXZlYy1cdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0FOT05dIHx8XG5tbS92bXNjYW4uYzoyMzYxOlx0XHRcdGluYWN0aXZlX2lzX2xvdyh0YXJnZXRfbHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG5tbS92bXNjYW4uYy0yMzYyLVx0XHRcdHNjLVx1MDAzZW1heV9kZWFjdGl2YXRlIHw9IERFQUNUSVZBVEVfQU5PTjtcbi0tXG5tbS92bXNjYW4uYy0yMzY1LVxubW0vdm1zY2FuLmM6MjM2NjpcdFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxubW0vdm1zY2FuLmMtMjM2Ny1cdFx0XHRcdFdPUktJTkdTRVRfQUNUSVZBVEVfRklMRSk7XG5tbS92bXNjYW4uYzoyMzY4Olx0XHRpZiAocmVmYXVsdHMgIT0gdGFyZ2V0X2xydXZlYy1cdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0ZJTEVdIHx8XG5tbS92bXNjYW4uYzoyMzY5Olx0XHQgICAgaW5hY3RpdmVfaXNfbG93KHRhcmdldF9scnV2ZWMsIExSVV9JTkFDVElWRV9GSUxFKSlcbm1tL3Ztc2Nhbi5jLTIzNzAtXHRcdFx0c2MtXHUwMDNlbWF5X2RlYWN0aXZhdGUgfD0gREVBQ1RJVkFURV9GSUxFO1xuLS1cbm1tL3Ztc2Nhbi5jLTIzODAtXHQgKi9cbm1tL3Ztc2Nhbi5jOjIzODE6XHRmaWxlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSk7XG5tbS92bXNjYW4uYy0yMzgyLVx0aWYgKGZpbGUgXHUwMDNlXHUwMDNlIHNjLVx1MDAzZXByaW9yaXR5IFx1MDAyNlx1MDAyNiAhKHNjLVx1MDAzZW1heV9kZWFjdGl2YXRlIFx1MDAyNiBERUFDVElWQVRFX0ZJTEUpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jPTI4ODk9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTAyLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG5tbS92bXNjYW4uYzoyOTAzOlx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtMjkwNC1cdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9MjkxNj12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MzItXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xubW0vdm1zY2FuLmM6MjkzMzpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTI5MzQtXHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQzNzI9dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNDM3OS1cdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xubW0vdm1zY2FuLmM6NDM4MDpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQzODEtXG4tLVxubW0vdm1zY2FuLmM9NDM5Nz12b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNDQwMS1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG5tbS92bXNjYW4uYzo0NDAyOlx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNDQwMy1cbi0tXG5tbS92bXNjYW4uYz00NDA4PXZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy00NDE0LVx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG5tbS92bXNjYW4uYzo0NDE1Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNDQxNi1cbi0tXG5tbS92bXNjYW4uYz00NDM0PXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQzNS17XG5tbS92bXNjYW4uYzo0NDM2Olx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ0MzctXG4tLVxubW0vdm1zY2FuLmM9NDQ0Mz1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQ0NC17XG5tbS92bXNjYW4uYzo0NDQ1Olx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ0NDYtXHRpbnQgdHlwZTtcbi0tXG5tbS92bXNjYW4uYz00NDkwPXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQ5MS17XG5tbS92bXNjYW4uYzo0NDkyOlx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ0OTMtXHRpbnQgdHlwZTtcbi0tXG5tbS92bXNjYW4uYz00NTYyPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU2OC1cbm1tL3Ztc2Nhbi5jOjQ1Njk6XHRjaGlsZF9scnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmM6NDU3MDpcdHBhcmVudF9scnV2ZWMgPSBnZXRfbHJ1dmVjKHBhcmVudCwgbmlkKTtcbm1tL3Ztc2Nhbi5jLTQ1NzEtXG4tLVxubW0vdm1zY2FuLmM9NTI4Mz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTMwOC1cdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbm1tL3Ztc2Nhbi5jOjUzMDk6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTUzMTAtXG4tLVxubW0vdm1zY2FuLmM9NTQyNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbi0tXG5tbS92bXNjYW4uYy01NDM5LVx0XHRcdGlmICghbnJfdG9fc2tpcC0tKVxubW0vdm1zY2FuLmM6NTQ0MDpcdFx0XHRcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNTQ0MS1cdFx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTU0NTY9c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5tbS92bXNjYW4uYy01NDcxLVxubW0vdm1zY2FuLmM6NTQ3MjpcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNTQ3My19XG4tLVxubW0vdm1zY2FuLmM9NTYzND1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTY1My1cdHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2c7XG5tbS92bXNjYW4uYzo1NjU0Olx0bHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jLTU2NTUtXG4tLVxubW0vdm1zY2FuLmM9NTgyOT12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNTgzNy1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG5tbS92bXNjYW4uYzo1ODM4Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmMtNTgzOS1cdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9NjE2ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTY2LVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmM6NjE2NzpcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG5tbS92bXNjYW4uYy02MTY4LVx0Ym9vbCByZWNsYWltYWJsZSA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTYxNzgtXG5tbS92bXNjYW4uYzo2MTc5Olx0dGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCBwZ2RhdCk7XG5tbS92bXNjYW4uYy02MTgwLVxuLS1cbm1tL3Ztc2Nhbi5jLTYyNDMtXHRcdGlmIChjZ3JvdXBfcmVjbGFpbShzYykgXHUwMDI2XHUwMDI2IHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKVxubW0vdm1zY2FuLmM6NjI0NDpcdFx0XHRzZXRfYml0KExSVVZFQ19DR1JPVVBfQ09OR0VTVEVELCBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWZsYWdzKTtcbm1tL3Ztc2Nhbi5jLTYyNDUtXG5tbS92bXNjYW4uYy02MjQ2LVx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jOjYyNDc6XHRcdFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpO1xubW0vdm1zY2FuLmMtNjI0OC1cdH1cbi0tXG5tbS92bXNjYW4uYy02MjU3LVx0ICAgICFzYy1cdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NjI1ODpcdCAgICAodGVzdF9iaXQoTFJVVkVDX0NHUk9VUF9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpIHx8XG5tbS92bXNjYW4uYzo2MjU5Olx0ICAgICB0ZXN0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpKSlcbm1tL3Ztc2Nhbi5jLTYyNjAtXHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9DT05HRVNURUQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTY0NDE9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTY0NDIte1xubW0vdm1zY2FuLmM6NjQ0MzpcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG5tbS92bXNjYW4uYy02NDQ0LVx0dW5zaWduZWQgbG9uZyByZWZhdWx0cztcbi0tXG5tbS92bXNjYW4uYy02NDQ4LVxubW0vdm1zY2FuLmM6NjQ0OTpcdHRhcmdldF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyh0YXJnZXRfbWVtY2csIHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjY0NTA6XHRyZWZhdWx0cyA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTik7XG5tbS92bXNjYW4uYzo2NDUxOlx0dGFyZ2V0X2xydXZlYy1cdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0FOT05dID0gcmVmYXVsdHM7XG5tbS92bXNjYW4uYzo2NDUyOlx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NjQ1MzpcdHRhcmdldF9scnV2ZWMtXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9GSUxFXSA9IHJlZmF1bHRzO1xubW0vdm1zY2FuLmMtNjQ1NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDc1CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDEzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IFJlY2xhaW0gTG9naWMgTW9kaWZpY2F0aW9uKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIGNvZGUgY2hhbmdlIGFzIEkgc2VlIGl0LiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBzaXR1YXRpb24gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O3ZlIHNwb3R0ZWQgYSBtb2RpZmljYXRpb24gdG8gdGhlIGFub255bW91cyBwYWdlIHJlY2xhaW0gbG9naWMgd2l0aGluIGBtbS92bXNjYW4uY2AuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgY2FsbCB0byBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYW5kIGEgbW92ZSBjb25jZXJuaW5nIGBnZXRfbHJ1dmVjKClgLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIHdlJiMzOTtyZSAqbm90KiBkZWFsaW5nIHdpdGggbWVtY2dzICh3aGljaCBpcyB0aGUgc3RhbmRhcmQsIGRlZmF1bHQgc2V0dXApLCBhbmQgYENPTkZJR19NRU1DR2AgaXMgKmVuYWJsZWQqIOKAkyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIOKAkyBjYWxsaW5nIGBnZXRfbHJ1dmVjKE5VTEwsIG5pZClgIHRyaWdnZXJzIGEgYFZNX1dBUk5fT05fT05DRWAgYXNzZXJ0aW9uLCB3aGljaCBpcyBhIGtlcm5lbCB3YXJuaW5nLiBUaGlzIGlzIGhhcHBlbmluZyBiZWNhdXNlIG9mIGEgY2hlY2sgcmVsYXRlZCB0byBtZW1jZyBub3QgYmVpbmcgZGlzYWJsZWQgd2hlbiBgbWVtY2dgIGlzIG51bGwuIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIG5vbi1tZW1jZyByZWNsYWltIHBhdGggaGFzIGJlZW4gYWx0ZXJlZC4gRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIGEgY2hhbmdlIGluIGhvdyB0aGUgTFJVIHNjYW5uaW5nIGlzIGJhbGFuY2VkIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIHBhZ2VzIHVuZGVyIHN3YXAgcHJlc3N1cmUuIFRoZSBsb2dpYyBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gaG93IHdlIGRlY2lkZSB0byByZWNsYWltIGFub24gcGFnZXMsIGVzcGVjaWFsbHkgd2hlbiBzd2FwIGlzIHByZXNlbnQuIEl0IGNvdWxkIGFmZmVjdCB0aGUgYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgcGFnZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgoKV2UgaGF2ZSBhIGNsZWFyIHBhdGggdGhhdCBsZWFkcyB0byB0aGlzIGFzc2VydGlvbiBvciBhbHRlcmVkIGJlaGF2aW9yIGFuZCBhZmZlY3RzIHJlY2xhaW0vc2Nhbm5pbmcuIFNvLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgdGhpcyBwYXRoLgoKRm9yIEZvY3VzU3ltYm9scywgaGVyZSYjMzk7cyB3aGF0IHN0YW5kcyBvdXQ6IGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCwgYGdldF9scnV2ZWNgLCBgZ2V0X3NjYW5fY291bnRgLCBgem9uZV9yZWNsYWltYWJsZV9wYWdlc2AsIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBMUlUgc2Nhbm5pbmcgYW5kIGFub24gcGFnZSByZWNsYW1hdGlvbi4gVGhleSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgaW50byB0aGUgbW9kaWZpZWQgbG9naWMuCgpBbmQsIG9mIGNvdXJzZSwgZm9yIGVuYWJsaW5nIGNvbmZpZ3MsIHdlJiMzOTtsbCBuZWVkIGBTV0FQYCBiZWNhdXNlIG9mIHRoZSBgZ2V0X25yX3N3YXBfcGFnZXMoKSAmZ3Q7IDBgIGNoZWNrIGFuZCBzd2FwIGNhY2hlIGxvZ2ljLCBhbmQgYE1FTUNHYCBiZWNhdXNlIGl0JiMzOTtzIHJlcXVpcmVkIGZvciB0aGUgYXNzZXJ0aW9uIHRoYXQgb2NjdXJzIHdoZW4gYGdldF9scnV2ZWNgIGlzIGNhbGxlZCB3aXRoIGEgTlVMTCBtZW1jZyBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGFuZCBhbHNvIGZvciB0aGUgY2FsbCBwYXRoIGluIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVjbGFpbWFibGVfYW5vbl9pc19sb3cmIzM0OywKICAgICYjMzQ7Y2FuX3JlY2xhaW1fYW5vbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtnZXRfbHJ1dmVjJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O3pvbmVfcmVjbGFpbWFibGVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIGludG8gY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIHRvIGdhdGUgYW5vbiBwYWdlIHNjYW5uaW5nIGJhc2VkIG9uIHN3YXBjYWNoZSBsZXZlbHMuIEFkZGl0aW9uYWxseSwgY2FsbGluZyBnZXRfbHJ1dmVjKCkgd2l0aCBhIE5VTEwgbWVtY2cgaW4gbm9uLW1lbWNnIHJlY2xhaW0gcGF0aHMgdW5kZXIgQ09ORklHX01FTUNHIGV4ZWN1dGVzIFZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSwgaW50cm9kdWNpbmcgcG90ZW50aWFsIGFzc2VydGlvbiB0cmlnZ2VycyBhbmQgYWx0ZXJpbmcgc2NhbiBiYWxhbmNlIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY2xhaW1hYmxlX2Fub25faXNfbG93JiMzNDssCiAgICAmIzM0O2Nhbl9yZWNsYWltX2Fub25fcGFnZXMmIzM0OywKICAgICYjMzQ7Z2V0X2xydXZlYyYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDt6b25lX3JlY2xhaW1hYmxlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19scnV2ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGFub255bW91cyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSBpbnRvIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSB0byBnYXRlIGFub24gcGFnZSBzY2FubmluZyBiYXNlZCBvbiBzd2FwY2FjaGUgbGV2ZWxzLiBBZGRpdGlvbmFsbHksIGNhbGxpbmcgZ2V0X2xydXZlYygpIHdpdGggYSBOVUxMIG1lbWNnIGluIG5vbi1tZW1jZyByZWNsYWltIHBhdGhzIHVuZGVyIENPTkZJR19NRU1DRyBleGVjdXRlcyBWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSksIGludHJvZHVjaW5nIHBvdGVudGlhbCBhc3NlcnRpb24gdHJpZ2dlcnMgYW5kIGFsdGVyaW5nIHNjYW4gYmFsYW5jZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9uIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHRoZSBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgaGVscGVyIGFuZCBpbnZva2luZyBpdCBmcm9tIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLiBUbyBzdXBwb3J0IHRoaXMsIGBnZXRfbHJ1dmVjKClgIGlzIHJlbG9jYXRlZCBlYXJsaWVyIGluIHRoZSBmaWxlLlxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgc3RydWN0IGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA1OjExOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1NjcwOGQxZDJkZmQ1Li4xOTJiZDA5ODAxMjE3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMzM5LDYgJiM0MzszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAlyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzOwlpZiAobWVtY2cpIHsKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9ICZhbXA7bWVtY2ctJmd0O25vZGVpbmZvW25pZF0tJmd0O2xydXZlYzsKJiM0MzsKJiM0MzsJCS8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovCiYjNDM7CQlpZiAoIWxydXZlYy0mZ3Q7cGdkYXQpCiYjNDM7CQkJbHJ1dmVjLSZndDtwZ2RhdCA9IHBnZGF0OwomIzQzOwomIzQzOwkJcmV0dXJuIGxydXZlYzsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwlWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3BnZGF0LSZndDtfX2xydXZlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCWludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7CiYjNDM7CiYjNDM7CWlmICghc2MgfHwgKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7CiYjNDM7CQkgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pOwomIzQzOwlzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7CiYjNDM7CiYjNDM7CXJldHVybiBzd2FwY2FjaGUgJmx0OyBtaW4oYW5vbl9wYWdlcyAmZ3Q7Jmd0OyA2LCBTV0FQX0NMVVNURVJfTUFYKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKQEAgLTM0OCwxMSAmIzQzOzM4NCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCSAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUKIAkJICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlPwogCQkgKi8KLQkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwKQomIzQzOwkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKIAkJLyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqLwotCQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwKQomIzQzOwkJaWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpICZndDsgMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSkKIAkJCXJldHVybiB0cnVlOwogCX0KIApAQCAtMjY3NCwyNiAmIzQzOzI3MTIsNiBAQCBzdGF0aWMgYm9vbCBzaG91bGRfY2xlYXJfcG1kX3lvdW5nKHZvaWQpCiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKQkoKHNlcSkgJSBNRU1DR19OUl9HRU5TKQogI2RlZmluZSBnZXRfbWVtY2dfYmluKGJpbikJKChiaW4pICUgTUVNQ0dfTlJfQklOUykKIAotc3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKQotewotCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTsKLQotI2lmZGVmIENPTkZJR19NRU1DRwotCWlmIChtZW1jZykgewotCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSAmYW1wO21lbWNnLSZndDtub2RlaW5mb1tuaWRdLSZndDtscnV2ZWM7Ci0KLQkJLyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi8KLQkJaWYgKCFscnV2ZWMtJmd0O3BnZGF0KQotCQkJbHJ1dmVjLSZndDtwZ2RhdCA9IHBnZGF0OwotCi0JCXJldHVybiBscnV2ZWM7Ci0JfQotI2VuZGlmCi0JVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpOwotCi0JcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwotfQotCiBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHkgaW4gYG1tL3Ztc2Nhbi5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgbW0vdm1zY2FuLmNgIHRoYXQgbW92ZXMgYGdldF9scnV2ZWMoKWAgdXAgaW4gdGhlIGZpbGUgYW5kIGludHJvZHVjZXMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIFRoZSB0YXNrIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIEtNU0FOIG9yIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGZvciB0aGlzIGNvZGUgY2hhbmdlLiBHaXZlbiBteSBleHBlcnRpc2UsIHRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIC0gaXQmIzM5O3MgYSBjb2RlIHJldmlldywgc3BlY2lmaWNhbGx5IGV2YWx1YXRpbmcgbWVtb3J5IHNhZmV0eSBjb25jZXJucy4gVGhlIHNldmVyaXR5IGlzIGxvdywgYXMgaXQmIzM5O3MgYSBkZWZlbnNpdmUgcmV2aWV3LgoKRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZS4gYGdldF9scnV2ZWMoKWAgaXMgbW92ZWQgYW5kIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGJlY2F1c2UgaXQmIzM5O3MgbmV3LiAgSSBzZWUgdGhhdCBpdCB0YWtlcyBgbWVtY2dgLCBgbmlkYCwgYW5kIGEgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlIChgc2NgKSBhcyBpbnB1dC4gIEluc2lkZSwgaXQgZ2V0cyB0aGUgYGxydXZlY2AgYW5kIGNhbGN1bGF0ZXMgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYC4gSXQgcmV0dXJucyBhIGJvb2xlYW4gYmFzZWQgb24gYSBjb21wYXJpc29uIGJldHdlZW4gYHN3YXBjYWNoZWAgYW5kIGEgdmFsdWUgZGVyaXZlZCBmcm9tIGBhbm9uX3BhZ2VzYC4gVGhpcyBsb29rcyBsaWtlIHNvbWUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgaGV1cmlzdGljIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgdGhyb3R0bGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBiYXNlZCBvbiBzd2FwIGNhY2hlIGxldmVscyBhbmQgSU8gY29uc3RyYWludHMuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBUaGUgY29kZSBjaGVja3MgaWYgYHNjYCBpcyBOVUxMLiBgbHJ1dmVjYCBpcyBhc3NpZ25lZCB0aGUgcmV0dXJuIG9mIGBnZXRfbHJ1dmVjKClgLCB3aGljaCBsb29rcyBzYWZlLiAgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYCBhcmUgc2NhbGFyIHZhcmlhYmxlcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGNhbGxzIHRvIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYC4gVGhlIGNhbGN1bGF0aW9uIGlzIGEgcHVyZSBpbnRlZ2VyIGNhbGN1bGF0aW9uLiAgTm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBoZXJlLCBubyBkaXJlY3QgbWVtb3J5IGFjY2VzcyB0byB1c2VyLXNwYWNlLCBubyBzdHJ1Y3QgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQsIG5vIHBvdGVudGlhbCBmb3IgaW5mbyBsZWFrcyBvciBwYWRkaW5nIGxlYWtzIGZyb20gdGhlIGxvb2tzIG9mIGl0LiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHNjb3BlZC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIEtNU0FOIGZsYWdzIGF0IGFsbC4KClRvIGJlIGV4dHJhIHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBjYWxsZXJzIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LiBJJiMzOTtsbCBydW4gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLCBidXQgYmFzZWQgb24gdGhlIGNvZGUgaXRzZWxmLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhbmQgbG9jYWxpemVkIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTm8gS01TQU4gZmxhZ3Mgc2VlbSBhcHBsaWNhYmxlIGhlcmUuIEl0JiMzOTtzIGxpa2VseSBLQVNBTiBpcyBhbHJlYWR5IHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZSwgYW5kIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZSBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhbnkgb2YgdGhlIGlzc3VlcyBLTVNBTiBkZWFscyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdGlmIChzYyBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlbm9fZGVtb3Rpb24pXG4gMzMxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAzMzI6XHRcbiAzMzM6XHRcdG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ2RhdCwgXHUwMDI2YWxsb3dlZF9tYXNrKTtcbiAzMzQ6XHRcdGlmIChub2Rlc19lbXB0eShhbGxvd2VkX21hc2spKVxuIDMzNTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzM2Olx0XG4gMzM3Olx0XHQvKiBGaWx0ZXIgb3V0IG5vZGVzIHRoYXQgYXJlIG5vdCBpbiBjZ3JvdXAmIzM5O3MgbWVtc19hbGxvd2VkLiAqL1xuIDMzODpcdFx0bWVtX2Nncm91cF9ub2RlX2ZpbHRlcl9hbGxvd2VkKG1lbWNnLCBcdTAwMjZhbGxvd2VkX21hc2spO1xuIDMzOTpcdFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xuIDM0MDpcdH1cbiAzNDE6XHRcbiAzNDI6XHRzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4gMzQzOlx0e1xuIDM0NDpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuIDM0NTpcdFxuIDM0NjpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbiAzNDc6XHRcdGlmIChtZW1jZykge1xuIDM0ODpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbiAzNDk6XHRcbiAzNTA6XHRcdFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cbiAzNTE6XHRcdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4gMzUyOlx0XHRcdFx0bHJ1dmVjLVx1MDAzZXBnZGF0ID0gcGdkYXQ7XG4gMzUzOlx0XG4gMzU0Olx0XHRcdHJldHVybiBscnV2ZWM7XG4gMzU1Olx0XHR9XG4gMzU2Olx0I2VuZGlmXG4gMzU3Olx0XHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4gMzU4Olx0XG4gMzU5Olx0XHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gMzYwOlx0fVxuIDM2MTpcdFxuIDM2MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gMzYzOlx0XHRcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIDM2NDpcdHtcbiAzNjU6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG4gMzY2Olx0XHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbiAzNjc6XHRcbiAzNjg6XHRcdGlmICghc2MgfHwgKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gMzY5Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzNzA6XHRcbiAzNzE6XHRcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7XG4gMzcyOlx0XHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4gMzczOlx0XHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4gMzc0Olx0XG4gMzc1Olx0XHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4gMzc2Olx0fVxuIDM3NzpcdFxuIDM3ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAzNzk6XHRcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIDM4MDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIDM4MTpcdHtcbiAzODI6XHRcdGlmIChtZW1jZyA9PSBOVUxMKSB7XG4gMzgzOlx0XHRcdC8qXG4gMzg0Olx0XHRcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmVcbiAzODU6XHRcdFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xuIDM4NjpcdFx0XHQgKi9cbiAzODc6XHRcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gMzg4Olx0XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIDM4OTpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDM5MDpcdFx0fSBlbHNlIHtcbiAzOTE6XHRcdFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xuIDM5MjpcdFx0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gMzkzOlx0XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIDM5NDpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDM5NTpcdFx0fVxuIDM5NjpcdFxuIDM5NzpcdFx0LypcbiAzOTg6XHRcdCAqIFRoZSBwYWdlIGNhbiBub3QgYmUgc3dhcHBlZC5cbiAzOTk6XHRcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NzgKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIsIGFuZCBob25lc3RseSwgaXQmIzM5O3MgcHJldHR5IGNsZWFuIGFuZCBkaXJlY3QuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgbG9jYWxpemVkIGFuZCBzZW5zaWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IHJlYXJyYW5naW5nIHRoZSBgZ2V0X2xydXZlYygpYCBoZWxwZXIgd2l0aGluIGBtbS92bXNjYW4uY2AsIHdoaWNoIG1ha2VzIGl0IG1vcmUgYWNjZXNzaWJsZSwgd2hpY2ggaXMgZmluZS4gVGhlIHJlYWwgbWVhdCBvZiBpdCBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHRvIGNoZWNrIGlmIHRoZSBzd2FwY2FjaGUgaXMgbG93IHJlbGF0aXZlIHRvIGFub255bW91cyBwYWdlcywgYnV0IG9ubHkgaWYgd2UmIzM5O3JlICpub3QqIGRlYWxpbmcgd2l0aCBkaXJlY3QgSS9PLCBqdWRnaW5nIGJ5IHRoZSBgIShzYy0mZ3Q7Z2ZwX21hc2sgJmFtcDsgX19HRlBfSU8pYCBjaGVjay4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlbiB0aGUgcGF0Y2gganVzdCBjYWxscyB0aGlzIG5ldyBmdW5jdGlvbiB3aXRoaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuCgpDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gcmVkIGZsYWdzIGhlcmUsIG5vdGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uJiMzNDsgb3IgJiMzNDtkYXRhIGxlYWsmIzM0Oy4gTm8gbmV3IGFsbG9jYXRpb25zLCBub3RoaW5nIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGJlaW5nIHJlYWQgb3IgZXhwb3NlZC4gVGhlIHZhcmlhYmxlcyB3aXRoaW4gdGhlIG5ldyBmdW5jdGlvbiBhcmUgYWxsIGxvY2FsIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCB3aGljaCBpcyBleGNlbGxlbnQuIE5vIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmNlcm5zIG9yIGFueSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IGp1bXAgb3V0IGF0IG1lLgoKR2l2ZW4gdGhlIHNpbXBsaWNpdHkgYW5kIHRoZSBmb2N1c2VkIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgZm9yIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBjb25maWd1cmF0aW9ucyBzaG91bGQgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHZlcnkgdGFyZ2V0ZWQgY2hhbmdlcyB3aXRoIG1pbmltYWwgY29tcGxleGl0eSwgYW5kIHRoZSBleGlzdGluZyBjaGVja3MsIGNvbWJpbmVkIHdpdGggdGhlIGxhY2sgb2YgYW55IHNpZ25pZmljYW50IG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNlY3VyaXR5IGNvbmNlcm5zLCByZW5kZXJzIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9uIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHRoZSBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgaGVscGVyIGFuZCBpbnZva2luZyBpdCBmcm9tIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLiBUbyBzdXBwb3J0IHRoaXMsIGBnZXRfbHJ1dmVjKClgIGlzIHJlbG9jYXRlZCBlYXJsaWVyIGluIHRoZSBmaWxlLlxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgc3RydWN0IGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGFub255bW91cyBwYWdlIHJlY2xhaW0gZGVjaXNpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgdGhlIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBoZWxwZXIgYW5kIGludm9raW5nIGl0IGZyb20gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIFRvIHN1cHBvcnQgdGhpcywgYGdldF9scnV2ZWMoKWAgaXMgcmVsb2NhdGVkIGVhcmxpZXIgaW4gdGhlIGZpbGUuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYGFub25fcGFnZXNgLCBgc3dhcGNhY2hlYCwgYGxydXZlY2ApIGFyZSBpbW1lZGlhdGVseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBrZXJuZWwgc3RhdGUgZnVuY3Rpb25zIChgZ2V0X2xydXZlYygpYCBhbmQgYGxydXZlY19wYWdlX3N0YXRlKClgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvIG5vdCBtb2RpZnkgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLCBkbyBub3QgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgYWNyb3NzIGtlcm5lbC91c2VyIGJvdW5kYXJpZXMgKGUuZy4gdmlhIGNvcHlfdG9fdXNlciBvciBuZXRsaW5rKSwgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaW52YWxpZCBzdHJ1Y3QgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMTo1My43OTQxNjE3MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU5OTcyMDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfbHJ1dmVjXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbiBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGhlbHBlciBhbmQgaW52b2tpbmcgaXQgZnJvbSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVG8gc3VwcG9ydCB0aGlzLCBgZ2V0X2xydXZlYygpYCBpcyByZWxvY2F0ZWQgZWFybGllciBpbiB0aGUgZmlsZS5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG5cXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaW52YWxpZCBzdHJ1Y3QgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMTo1My43OTQxNjY3ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDA0MTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwNToxMTo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTMzOSw2ICszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4gXFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcbitcXG4rI2lmZGVmIENPTkZJR19NRU1DR1xcbitcXHRpZiAobWVtY2cpIHtcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXFx1MDAyNm1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VscnV2ZWM7XFxuK1xcbitcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gbWVtX2Nncm91cF9scnV2ZWMoKSAqL1xcbitcXHRcXHRpZiAoIWxydXZlYy1cXHUwMDNlcGdkYXQpXFxuK1xcdFxcdFxcdGxydXZlYy1cXHUwMDNlcGdkYXQgPSBwZ2RhdDtcXG4rXFxuK1xcdFxcdHJldHVybiBscnV2ZWM7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdFZNX1dBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpKTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4re1xcbitcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbitcXHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcXG4rXFxuK1xcdGlmICghc2MgfHwgKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0YW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgK1xcbitcXHRcXHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xcbitcXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XFxuK1xcbitcXHRyZXR1cm4gc3dhcGNhY2hlIFxcdTAwM2MgbWluKGFub25fcGFnZXMgXFx1MDAzZVxcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbkBAIC0zNDgsMTEgKzM4NCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmVcXG4gXFx0XFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXFx1MDAzZSAwKVxcbitcXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovXFxuLVxcdFxcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcXHUwMDNlIDApXFxuK1xcdFxcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0yNjc0LDI2ICsyNzEyLDYgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxcbiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKVxcdCgoc2VxKSAlIE1FTUNHX05SX0dFTlMpXFxuICNkZWZpbmUgZ2V0X21lbWNnX2JpbihiaW4pXFx0KChiaW4pICUgTUVNQ0dfTlJfQklOUylcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4te1xcbi1cXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XFxuLVxcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuLVxcdGlmIChtZW1jZykge1xcbi1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlYztcXG4tXFxuLVxcdFxcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXFxuLVxcdFxcdGlmICghbHJ1dmVjLVxcdTAwM2VwZ2RhdClcXG4tXFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2VwZ2RhdCA9IHBnZGF0O1xcbi1cXG4tXFx0XFx0cmV0dXJuIGxydXZlYztcXG4tXFx0fVxcbi0jZW5kaWZcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbi1cXG4tXFx0cmV0dXJuIFxcdTAwMjZwZ2RhdC1cXHUwMDNlX19scnV2ZWM7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTE6NTQuMjg4ODExODY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTU2OTgxMjU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfbHJ1dmVjXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjExOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTMzOSw2ICszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdHJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuK3tcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRpZiAobWVtY2cpIHtcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXHUwMDI2bWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWM7XG4rXG4rXHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXG4rXHRcdGlmICghbHJ1dmVjLVx1MDAzZXBnZGF0KVxuK1x0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuK1xuK1x0XHRyZXR1cm4gbHJ1dmVjO1xuK1x0fVxuKyNlbmRpZlxuK1x0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuK1x0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4rXG4rXHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4rXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4rXG4rXHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuQEAgLTM0OCwxMSArMzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxuIFx0XHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4gXHRcdCAqL1xuLVx0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMClcbitcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xuLVx0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDApXG4rXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG5AQCAtMjY3NCwyNiArMjcxMiw2IEBAIHN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKVx0KChzZXEpICUgTUVNQ0dfTlJfR0VOUylcbiAjZGVmaW5lIGdldF9tZW1jZ19iaW4oYmluKVx0KChiaW4pICUgTUVNQ0dfTlJfQklOUylcbiBcbi1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuLVxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdGlmIChtZW1jZykge1xuLVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbi1cbi1cdFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cbi1cdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZXBnZGF0ID0gcGdkYXQ7XG4tXG4tXHRcdHJldHVybiBscnV2ZWM7XG4tXHR9XG4tI2VuZGlmXG4tXHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4tXG4tXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjExOjU0LjI4ODgxMzMzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5Mzk4MzM0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTXNjYW4gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgdGFyZ2V0ZWQgY2hhbmdlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYW5vbnltb3VzIHBhZ2UgcmVjbGFtYXRpb24uIExldCdzIGRlbHZlIGluLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyYWwgc2hpZnRzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIEkga25vdyBpbnRpbWF0ZWx5LCBpcyBjZW50cmFsIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcGFnZSByZWNsYWltIHByb2Nlc3Nlcy4gSXQncyBzaW1wbHkgcmVvcmdhbml6aW5nIGBnZXRfbHJ1dmVjKClgIOKAkyBtb3ZpbmcgaXQgZWFybGllciBpbiB0aGUgZmlsZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZTsgdGhpcyBjb3VsZCBiZSBhIG1pbm9yIHJlZmFjdG9yaW5nIGZvciByZWFkYWJpbGl0eSBvciBwb3NzaWJseSB0byBmYWNpbGl0YXRlIGEgZnV0dXJlIGNoYW5nZS5cblxuVGhlIG1lYXQgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtb3JlIGdyYW51bGFyIGNoZWNrIHJlbGF0ZWQgdG8gdGhlIGF2YWlsYWJpbGl0eSBvciBwb3RlbnRpYWwgc2NhcmNpdHkgb2YgcmVjbGFpbWFibGUgYW5vbnltb3VzIHBhZ2VzLiBUaGVuLCBsb29raW5nIGF0IHRoZSBjYWxsIHRvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgIGlzIGtleS5cblxuVGhlIGNyaXRpY2FsIGNoYW5nZSBsaWVzIHdpdGhpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gSXQgYXBwZWFycyB3ZSdyZSBhZGRpbmcgYW4gYWRkaXRpb25hbCBjb25kaXRpb246IGBcdTAwMjZcdTAwMjYgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKWAgd2hlbiBlaXRoZXIgdGhlIGdsb2JhbCBzd2FwIHVzYWdlIG9yIHRoZSBtZW1vcnkgY2dyb3VwIHN3YXAgdXNhZ2UgaXMgZ3JlYXRlciB0aGFuIHplcm8uIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHBpZWNlLiBJdCBpbmRpY2F0ZXMgdGhhdCB3aGVuIHN3YXAgaXMgaW4gdXNlIChvciBwb3RlbnRpYWxseSBjbG9zZSB0byBiZWluZyB1c2VkKSwgdGhlIG5ldyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIHdpbGwgZWZmZWN0IHBhZ2UgcmVjbGFpbS4gVGhlIHN5c3RlbSB3aWxsICpub3QqIHJlY2xhaW0gYW5vbnltb3VzIHBhZ2VzIGlmIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCByZXR1cm5zIHRydWUuXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIHRoZSBpbXBhY3QuIFRoaXMgc3VnZ2VzdHMgYSBtb3JlIGNhdXRpb3VzIGFwcHJvYWNoIHRvIGFub255bW91cyBwYWdlIHJlY2xhaW0gd2hlbiBzd2FwIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHdpdGhpbiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYW5kIGhvdyBpdCBkZXRlcm1pbmVzIFwibG93XCIgcmVjbGFpbWFibGUgYW5vbiBwYWdlcy5cblxuVG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgZWZmZWN0LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZmluZCB3aGVyZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGBtbS92bXNjYW4uY2AgY29udGV4dC4gSSdsbCBlaXRoZXIgZ3JlcCBmb3IgaXRzIHVzYWdlcyBvciBzaW1wbHkgcmVhZCB0aHJvdWdoIHRoZSBmaWxlIHRvIGlkZW50aWZ5IHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgdGhpcyBjaGFuZ2UgY2FzY2FkZXMgdGhyb3VnaCB0aGUgc2Nhbm5pbmcgcHJvY2Vzcy4gVGhpcyB3aWxsIGxldCBtZSBhc3Nlc3MgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMTo1OC4yMjg2NTA2NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxODQ4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FuX3JlY2xhaW1fYW5vbl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zNjI9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3Ny1cXG5tbS92bXNjYW4uYzozNzg6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTM3OS1cXHRcXHRcXHRcXHRcXHQgIGludCBuaWQsXFxuLS1cXG5tbS92bXNjYW4uYz00MTA9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE1LVxcdFxcdHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKTtcXG5tbS92bXNjYW4uYzo0MTY6XFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgem9uZV90b19uaWQoem9uZSksIE5VTEwpKVxcbm1tL3Ztc2Nhbi5jLTQxNy1cXHRcXHRuciArPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfWk9ORV9JTkFDVElWRV9BTk9OKSArXFxuLS1cXG5tbS92bXNjYW4uYz0yNTMxPXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yNTQyLVxcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cXG5tbS92bXNjYW4uYzoyNTQzOlxcdGlmICghc2MtXFx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxubW0vdm1zY2FuLmMtMjU0NC1cXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDA4Mi1cXHRyZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NDA4MzpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQwODQtXFx0XFx0cmVjbGFpbWFibGUgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MDc4LVxcdGluYWN0aXZlX2xydV9wYWdlcyA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NjA3OTpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTYwODAtXFx0XFx0aW5hY3RpdmVfbHJ1X3BhZ2VzICs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjExOjU4LjI3NDg0NDgzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjAwMzE5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBBbm9ueW1vdXMgUGFnZSBSZWNsYW1hdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgbWVtb3J5IGlzc3VlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBteSBiZWFyaW5ncyBpbiBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkcmlsbCBkb3duIGFyb3VuZCB0aGUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGZ1bmN0aW9uIGFuZCB0aGUgd2F5IGBnZXRfc2Nhbl9jb3VudGAgaXMgaGFuZGxlZC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgbG9naWMgZ292ZXJuaW5nIGFub255bW91cyBwYWdlIHJlY2xhbWF0aW9uIGlzIGxpa2VseSBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGhlcmUg4oCTIHdoZW4gYXJlIHdlIGFjdHVhbGx5IGNob29zaW5nIHRvIHJlY2xhaW0gYW5vbiBwYWdlcywgYW5kIGhvdyBhcmUgd2UgZGV0ZXJtaW5pbmcgKmhvdyBtdWNoKiB0byByZWNsYWltPyBBcmUgd2UgYmVpbmcgdG9vIGFnZ3Jlc3NpdmUsIHRvbyBjb25zZXJ2YXRpdmUsIG9yIGlzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGFtaXNzIGluIHRoZSBhY2NvdW50aW5nPyBUaW1lIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MDAuMzM0ODgzNjQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4gMzQzOlxcdHtcXG4gMzQ0OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiAzNDc6XFx0XFx0aWYgKG1lbWNnKSB7XFxuIDM0ODpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlYztcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cXG4gMzUxOlxcdFxcdFxcdGlmICghbHJ1dmVjLVxcdTAwM2VwZ2RhdClcXG4gMzUyOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlcGdkYXQgPSBwZ2RhdDtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuIGxydXZlYztcXG4gMzU1OlxcdFxcdH1cXG4gMzU2OlxcdCNlbmRpZlxcbiAzNTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRyZXR1cm4gXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYztcXG4gMzYwOlxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gMzYzOlxcdFxcdFxcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiAzNjQ6XFx0e1xcbiAzNjU6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG4gMzY2OlxcdFxcdHVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRpZiAoIXNjIHx8IChzYy1cXHUwMDNlZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9JTykpXFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4gMzcyOlxcdFxcdFxcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XFxuIDM3MzpcXHRcXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XFxuIDM3NDpcXHRcXG4gMzc1OlxcdFxcdHJldHVybiBzd2FwY2FjaGUgXFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcXHUwMDNlXFx1MDAzZSA2LCBTV0FQX0NMVVNURVJfTUFYKTtcXG4gMzc2OlxcdH1cXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAzNzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbiAzODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdGlmIChtZW1jZyA9PSBOVUxMKSB7XFxuIDM4MzpcXHRcXHRcXHQvKlxcbiAzODQ6XFx0XFx0XFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxcbiAzODU6XFx0XFx0XFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbiAzODY6XFx0XFx0XFx0ICovXFxuIDM4NzpcXHRcXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gMzg4OlxcdFxcdFxcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxcbiAzODk6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDM5MDpcXHRcXHR9IGVsc2Uge1xcbiAzOTE6XFx0XFx0XFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xcbiAzOTI6XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiAzOTM6XFx0XFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIDM5NDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzk1OlxcdFxcdH1cXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0LypcXG4gMzk4OlxcdFxcdCAqIFRoZSBwYWdlIGNhbiBub3QgYmUgc3dhcHBlZC5cXG4gMzk5OlxcdFxcdCAqXFxuIDQwMDpcXHRcXHQgKiBDYW4gaXQgYmUgcmVjbGFpbWVkIGZyb20gdGhpcyBub2RlIHZpYSBkZW1vdGlvbj9cXG4gNDAxOlxcdFxcdCAqL1xcbiA0MDI6XFx0XFx0cmV0dXJuIGNhbl9kZW1vdGUobmlkLCBzYywgbWVtY2cpO1xcbiA0MDM6XFx0fVxcbiA0MDQ6XFx0XFxuIDQwNTpcXHQvKlxcbiA0MDY6XFx0ICogVGhpcyBtaXNzZXMgaXNvbGF0ZWQgZm9saW9zIHdoaWNoIGFyZSBub3QgYWNjb3VudGVkIGZvciB0byBzYXZlIGNvdW50ZXJzLlxcbiA0MDc6XFx0ICogQXMgdGhlIGRhdGEgb25seSBkZXRlcm1pbmVzIGlmIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBjb250aW51ZXMsIGl0IGlzXFxuIDQwODpcXHQgKiBub3QgZXhwZWN0ZWQgdGhhdCBpc29sYXRlZCBmb2xpb3Mgd2lsbCBiZSBhIGRvbWluYXRpbmcgZmFjdG9yLlxcbiA0MDk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjAwLjMzNTMyMTc0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MDYxNDE4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggZGVhbHMgd2l0aCBtZW1vcnkgcmVjbGFpbSwgc3dhcHBpbmcsIGFuZCBzY2FuIGJhbGFuY2luZy4gR2l2ZW4gdGhhdCwgaXQncyBwcmV0dHkgbGlrZWx5IHRoaXMgYXJlYSB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtcyDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgcG90ZW50aWFsbHkgdGhlIHNjaGVkdWxlciBpZiByZWNsYWltIGlzIGludm9sdmVkLCBtYXliZSBldmVuIEJQRiBpZiB0aGV5J3JlIGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgd2l0aCBwYWdlIGFsbG9jYXRpb24uIFllcCwgbG9va3MgbGlrZSBgV29ydGhGdXp6aW5nPXRydWVgLiBHb29kLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3ltYm9scyBhcmUgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbCBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZy4gQSBrZXkgZnVuY3Rpb24gaGVyZSBzZWVtcyB0byBiZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0Li4uIE9rYXksIGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgYnkgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgZ2V0X3NjYW5fY291bnRgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBhbmQgYHNob3VsZF9jb250aW51ZV9yZWNsYWltYC4gSG1tLCBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiB0aGVzZS5cblxuV2FpdCBhIHNlY29uZOKApiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgYHN0YXRpYyBpbmxpbmVgPyBPa2F5LCB0aGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgZnV6emluZyBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuICBTaW1pbGFybHksIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AgaXMgYWxzbyBzdGF0aWMgaW5saW5lLiBUaGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzLCBidXQgaXQncyBzdGlsbCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGl0cyBjYWxsZXJzLCBiZWNhdXNlIHRoZSBpbmxpbmluZyBtYXkgYmUgYSBnb29kIG9wcG9ydHVuaXR5IGZvciBzb21lIGludGVyZXN0aW5nIG11dGF0aW9uLiAgV2hhdCBhYm91dCBgZ2V0X2xydXZlY2A/IFl1cCwgdGhhdCdzIGFsc28gc3RhdGljLiBBbHJpZ2h0LlxuXG5TbywgSeKAmWxsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgY2FsbGVycyBub3c6IGBnZXRfc2Nhbl9jb3VudGAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YCwgYW5kIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgYW5kIHRoZW4gZXZhbHVhdGUgb3RoZXIgbm9uLXViaXF1aXRvdXMgY2FsbGVycyBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGxpa2VseSB0aGF0IGEgZnV6eiB0YXJnZXQgbmVlZHMgdG8gZm9jdXMgb24gdGhvc2UgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc2LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MDQuMTQxNDY3NDI2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODYzOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zY2FuX2NvdW50fHpvbmVfcmVjbGFpbWFibGVfcGFnZXN8c2V0X2luaXRpYWxfcHJpb3JpdHl8c2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Mzc4PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwOS0gKi9cXG5tbS92bXNjYW4uYzo0MTA6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3Ztc2Nhbi5jLTQxMS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTg9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy01MzUtXFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBNQVhfTlJfWk9ORVMgLSAxKSB7XFxubW0vdm1zY2FuLmM6NTM2OlxcdFxcdHJlY2xhaW1hYmxlICs9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7XFxubW0vdm1zY2FuLmMtNTM3LVxcdFxcdHdyaXRlX3BlbmRpbmcgKz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsXFxuLS1cXG5tbS92bXNjYW4uYz0yNDYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI1MzAtICovXFxubW0vdm1zY2FuLmM6MjUzMTpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI1MzItXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuLS1cXG5tbS92bXNjYW4uYz00MDEyPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA2OS1cXG5tbS92bXNjYW4uYzo0MDcwOnN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQwNzEte1xcbi0tXFxubW0vdm1zY2FuLmM9NDE1MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE1OC1cXG5tbS92bXNjYW4uYzo0MTU5OlxcdHNldF9pbml0aWFsX3ByaW9yaXR5KHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNDE2MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNTQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNzQtXFxubW0vdm1zY2FuLmM6NTE3NTpcXHRzZXRfaW5pdGlhbF9wcmlvcml0eShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNzYtXFxuLS1cXG5tbS92bXNjYW4uYz01ODk0PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTItXFxubW0vdm1zY2FuLmM6NTkxMzpcXHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XFxubW0vdm1zY2FuLmMtNTkxNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTUtXFx0XFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXFxubW0vdm1zY2FuLmM6NTk1NjpcXHRcXHQgKiBwcm9wb3J0aW9uYWxseSB3aGF0IHdhcyByZXF1ZXN0ZWQgYnkgZ2V0X3NjYW5fY291bnQoKS4gV2VcXG5tbS92bXNjYW4uYy01OTU3LVxcdFxcdCAqIHN0b3AgcmVjbGFpbWluZyBvbmUgTFJVIGFuZCByZWR1Y2UgdGhlIGFtb3VudCBzY2FubmluZ1xcbi0tXFxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDI3LSAqIFJlY2xhaW0vY29tcGFjdGlvbiBpcyB1c2VkIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuIEl0IHJlY2xhaW1zXFxubW0vdm1zY2FuLmM6NjAyODogKiBvcmRlci0wIHBhZ2VzIGJlZm9yZSBjb21wYWN0aW5nIHRoZSB6b25lLiBzaG91bGRfY29udGludWVfcmVjbGFpbSgpIHJldHVybnNcXG5tbS92bXNjYW4uYy02MDI5LSAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxcbi0tXFxubW0vdm1zY2FuLmMtNjAzMi0gKi9cXG5tbS92bXNjYW4uYzo2MDMzOnN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTYwMzQtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsXFxuLS1cXG5tbS92bXNjYW4uYz02MTY0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjI2MS1cXG5tbS92bXNjYW4uYzo2MjYyOlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MjYzLVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz02MjgyPXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX3JlYWR5KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMDAtXFx0ICogTm90ZSB0aGF0IHdlIHdvbid0IGFjdHVhbGx5IHJlY2xhaW0gdGhlIHdob2xlIGJ1ZmZlciBpbiBvbmUgYXR0ZW1wdFxcbm1tL3Ztc2Nhbi5jOjYzMDE6XFx0ICogYXMgdGhlIHRhcmdldCB3YXRlcm1hcmsgaW4gc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oKSBpcyBsb3dlci4gQnV0IGlmXFxubW0vdm1zY2FuLmMtNjMwMi1cXHQgKiB3ZSBhcmUgYWxyZWFkeSBhYm92ZSB0aGUgaGlnaCtnYXAgd2F0ZXJtYXJrLCBkb24ndCByZWNsYWltIGF0IGFsbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1Njk9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1ODAtXFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBaT05FX05PUk1BTCkge1xcbm1tL3Ztc2Nhbi5jOjY1ODE6XFx0XFx0aWYgKCF6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpIFxcdTAwMjZcXHUwMDI2IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKSlcXG5tbS92bXNjYW4uYy02NTgyLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjowNC4xOTAzNDA1MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjM3MTQyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeW1ib2xzIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgZWZmZWN0aXZlIGtlcm5lbCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZywgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgcmVjbGFpbS4gVGhlIGd1aWRlbGluZXMgZm9yIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGFuZCBpbnN0ZWFkLCBwaW5wb2ludCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFdlJ3JlIGxvb2tpbmcgdG8gYXZvaWQgdGhlIG5vaXNlIGFuZCBjb25jZW50cmF0ZSBvdXIgZWZmb3J0cy5cblxuSSd2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHM6IGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGdldF9zY2FuX2NvdW50YCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLCBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIGBscnVfZ2VuX2FnZV9ub2RlYCwgYW5kIGBscnVfZ2VuX3Nocmlua19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBob25lIGluIG9uIHRob3NlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBzaW5jZSB0aGF04oCZcyB3aGVyZSB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgc2hvdWxkIGJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgYWNjaWRlbnRhbGx5IGdyYWJiaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSAqdG9vKiBjb21tb24uXG5cbk5vdywgSSdtIGNoZWNraW5nIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQncyBub24tc3RhdGljIGFuZCBhcHBlYXJzIHRvIGJlIGEgY2xlYXIgZW50cnkgcG9pbnQgaW50byB6b25lIHJlY2xhaW0gbG9naWMuIFRoZW4gdGhlcmUncyBgZ2V0X3NjYW5fY291bnRgLCBgc2hyaW5rX2xydXZlY2AsIGFuZCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCB3aGljaCBhcmUgc3RhdGljIGJ1dCBtYXkgYmUgbGFyZ2UuIFRoaXMgd2lsbCBiZWFyIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBhbHNvIG5vdGVkIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgd2hpY2ggYXJlIHN0YXRpYyBpbmxpbmUsIGFuZCB0aHVzLCBtaWdodCBub3QgYmUgZGlyZWN0bHkgdGFyZ2V0YWJsZSwgYnV0IGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gYW5vbnltb3VzIHBhZ2UgcmVjbGFpbS4gSSBhbHNvIHJlbWVtYmVyIGBnZXRfbHJ1dmVjYCBhbmQgd2FudCB0byBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLlxuXG5JIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGxpa2UgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19TV0FQYC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGhvdyB0aG9zZSBjb25maWdzIG1pZ2h0IGluZmx1ZW5jZSB3aGljaCBjb2RlIHBhdGhzIGFyZSBhY3RpdmUuIEkgd2lsbCBzZWFyY2ggZm9yIHRoZXNlIHN5bWJvbHMgaW4gdGhlIGNvbmZpZ3MuXG5cbkluIHNob3J0LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZm9jdXNlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBsaWtlbHkgdGFyZ2V0aW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgbGFyZ2VyIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aG9zZSB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gdGhyb3VnaCBzb21lIG5vbi11YmlxdWl0b3VzIGVudHJ5LXBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjA5LjgyNzQ4NTczNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMjc1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X25yX3N3YXBfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz00MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF91c2FnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgc3dhcClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy00NDEtXFx0XFx0aWYgKHN3YXApXFxubW0vbWVtY29udHJvbC12MS5jOjQ0MjpcXHRcXHRcXHR2YWwgKz0gdG90YWxfc3dhcF9wYWdlcyAtIGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxubW0vbWVtY29udHJvbC12MS5jLTQ0My1cXHR9IGVsc2Uge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjUzLVxcdCAqIG5lZWQgZWFybGllciBhY2Nlc3MsIGFuZCB0aGUgd29ya2luZ3NldCBjb2RlIHJlbGllcyBvbiB0aGVcXG5tbS9tZW1jb250cm9sLmM6NDI1NDpcXHQgKiBjZ3JvdXAgdHJlZSBsaW5rYWdlIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKCkpLiBTb1xcbm1tL21lbWNvbnRyb2wuYy00MjU1LVxcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYzMj12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY1MC1cXG5tbS9tZW1jb250cm9sLmM6NTY1MTpsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy01NjUyLXtcXG5tbS9tZW1jb250cm9sLmM6NTY1MzpcXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xcbm1tL21lbWNvbnRyb2wuYy01NjU0LVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY4PXZvaWQgc2hvd19zd2FwX2NhY2hlX2luZm8odm9pZClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy03MC1cXHRwcmludGsoXFxcIiVsdSBwYWdlcyBpbiBzd2FwIGNhY2hlXFxcXG5cXFwiLCB0b3RhbF9zd2FwY2FjaGVfcGFnZXMoKSk7XFxubW0vc3dhcF9zdGF0ZS5jOjcxOlxcdHByaW50ayhcXFwiRnJlZSBzd2FwICA9ICVsZGtCXFxcXG5cXFwiLCBLKGdldF9ucl9zd2FwX3BhZ2VzKCkpKTtcXG5tbS9zd2FwX3N0YXRlLmMtNzItXFx0cHJpbnRrKFxcXCJUb3RhbCBzd2FwID0gJWx1a0JcXFxcblxcXCIsIEsodG90YWxfc3dhcF9wYWdlcykpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mzc4PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4Ni1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzozODc6XFx0XFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtMzg4LVxcdFxcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxcbi0tXFxubW0vdm1zY2FuLmMtMzkxLVxcdFxcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cXG5tbS92bXNjYW4uYzozOTI6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTM5My1cXHRcXHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3MTU9c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjcyMy1cXHRpZiAoIWNhbl9kZW1vdGUocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLCBtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzoyNzI0OlxcdCAgICBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcXHUwMDNjIE1JTl9MUlVfQkFUQ0gpXFxubW0vdm1zY2FuLmMtMjcyNS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTUyNS1cXHR9XFxubW0vd29ya2luZ3NldC5jOjUyNjpcXHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhldmljdGlvbl9tZW1jZykgXFx1MDAzZSAwKSB7XFxubW0vd29ya2luZ3NldC5jLTUyNy1cXHRcXHR3b3JraW5nc2V0X3NpemUgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGUoZXZpY3Rpb25fbHJ1dmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjowOS44NzY2MjA2ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4MTk5MDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBTd2FwIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBnZXRfbnJfc3dhcF9wYWdlc2AgaXMgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX1NXQVBgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB3aGVuIEknbSBhc3Nlc3NpbmcgdGhlIGNvcmUga2VybmVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIHdoZXRoZXIgdGhlIHN5c3RlbSBhY3R1YWxseSBoYXMgc3dhcCBlbmFibGVkLiBJZiBpdCBpc24ndCwgSSBuZWVkIHRvIGtub3cgd2h5IGFuZCB0aGF0IGhhcyBtZSB3b25kZXJpbmcgaWYgaXQncyBzYWZlIHRvIHVzZSBpbiBjb250ZXh0cyB3aGVyZSBzd2FwIGlzbid0LiBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgaXQncyBkZXBlbmRlbmNlIG9uIHRoZSBjb25maWcgZmxhZywgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUsIHJpZ2h0IG5vdyEgSSdsbCBnbyBjaGVjayB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoxMS44NTg2MTU0MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODkyNTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbnJfc3dhcF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD00MjU9c3RhdGljIGlubGluZSBib29sIHZtX3N3YXBfZnVsbCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDI5LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQzMDpzdGF0aWMgaW5saW5lIGxvbmcgZ2V0X25yX3N3YXBfcGFnZXModm9pZClcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MzEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDgzPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDg2LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ4NzojZGVmaW5lIGdldF9ucl9zd2FwX3BhZ2VzKClcXHRcXHRcXHQwTFxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ4OC0jZGVmaW5lIHRvdGFsX3N3YXBfcGFnZXNcXHRcXHRcXHQwTFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTg1PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU5MS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1OTI6ZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU5My1leHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTYwMD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA0LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjYwNTpzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA2LXtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo2MDc6XFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjA4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MTEuOTg3NTQ4Njk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjcyNDYxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZ2V0X25yX3N3YXBfcGFnZXNgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgYGdldF9ucl9zd2FwX3BhZ2VzYCBpbiB0aGUga2VybmVsLiBNeSBiZXN0IHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgNDIwLTQ5MCwgYXMgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBsaWtlbHkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZ3VhcmRzIHdpbGwgYmUuIFRoaXMgcmFuZ2Ugc2hvdWxkIGNvbnRhaW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGl0c2VsZiBhbmQgYW55IGAjaWZkZWZgIG9yIGAjaWZgIGJsb2NrcyB0aGF0IGNvbnRyb2wgd2hldGhlciBvciBob3cgaXQncyBkZWZpbmVkIGFuZCBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyB0byByZWxhdGUgdG8gc29tZSBzd2FwIGZlYXR1cmUgb3Igb3B0aW9uOyBmaW5kaW5nIHRoZSBndWFyZGluZyBtYWNybyB3aWxsIHRlbGwgbWUgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGUgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlIGluIHRoaXMgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MTQuMjE0Nzk3ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIwOlxcdGV4dGVybiBhdG9taWNfbG9uZ190IG5yX3N3YXBfcGFnZXM7XFxuIDQyMTpcXHRleHRlcm4gbG9uZyB0b3RhbF9zd2FwX3BhZ2VzO1xcbiA0MjI6XFx0ZXh0ZXJuIGF0b21pY190IG5yX3JvdGF0ZV9zd2FwO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHQvKiBTd2FwIDUwJSBmdWxsPyBSZWxlYXNlIHN3YXBjYWNoZSBtb3JlIGFnZ3Jlc3NpdmVseS4uICovXFxuIDQyNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdm1fc3dhcF9mdWxsKHZvaWQpXFxuIDQyNjpcXHR7XFxuIDQyNzpcXHRcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bnJfc3dhcF9wYWdlcykgKiAyIFxcdTAwM2MgdG90YWxfc3dhcF9wYWdlcztcXG4gNDI4OlxcdH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0c3RhdGljIGlubGluZSBsb25nIGdldF9ucl9zd2FwX3BhZ2VzKHZvaWQpXFxuIDQzMTpcXHR7XFxuIDQzMjpcXHRcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bnJfc3dhcF9wYWdlcyk7XFxuIDQzMzpcXHR9XFxuIDQzNDpcXHRcXG4gNDM1OlxcdGV4dGVybiB2b2lkIHNpX3N3YXBpbmZvKHN0cnVjdCBzeXNpbmZvICopO1xcbiA0MzY6XFx0ZXh0ZXJuIGludCBwaW5faGliZXJuYXRpb25fc3dhcF90eXBlKGRldl90IGRldmljZSwgc2VjdG9yX3Qgb2Zmc2V0KTtcXG4gNDM3OlxcdGV4dGVybiB2b2lkIHVucGluX2hpYmVybmF0aW9uX3N3YXBfdHlwZShpbnQgdHlwZSk7XFxuIDQzODpcXHRleHRlcm4gaW50IGZpbmRfaGliZXJuYXRpb25fc3dhcF90eXBlKGRldl90IGRldmljZSwgc2VjdG9yX3Qgb2Zmc2V0KTtcXG4gNDM5OlxcdGludCBmaW5kX2ZpcnN0X3N3YXAoZGV2X3QgKmRldmljZSk7XFxuIDQ0MDpcXHRleHRlcm4gdW5zaWduZWQgaW50IGNvdW50X3N3YXBfcGFnZXMoaW50LCBpbnQpO1xcbiA0NDE6XFx0ZXh0ZXJuIHNlY3Rvcl90IHN3YXBkZXZfYmxvY2soaW50LCBwZ29mZl90KTtcXG4gNDQyOlxcdGV4dGVybiBpbnQgX19zd2FwX2NvdW50KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDQzOlxcdGV4dGVybiBib29sIHN3YXBfZW50cnlfc3dhcHBlZChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDQ0OlxcdGV4dGVybiBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSk7XFxuIDQ0NTpcXHRzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbztcXG4gNDQ2OlxcdGV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDQ3OlxcdHNlY3Rvcl90IHN3YXBfZm9saW9fc2VjdG9yKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHQvKlxcbiA0NTA6XFx0ICogSWYgdGhlcmUgaXMgYW4gZXhpc3Rpbmcgc3dhcCBzbG90IHJlZmVyZW5jZSAoc3dhcCBlbnRyeSkgYW5kIHRoZSBjYWxsZXJcXG4gNDUxOlxcdCAqIGd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBubyByYWNlIG1vZGlmaWNhdGlvbiBvZiBpdCAoZS5nLiwgUFRMXFxuIDQ1MjpcXHQgKiBwcm90ZWN0aW5nIHRoZSBzd2FwIGVudHJ5IGluIHBhZ2UgdGFibGU7IHNobWVtJ3MgY21weGNoZyBwcm90ZWN0cyB0XFxuIDQ1MzpcXHQgKiBoZSBzd2FwIGVudHJ5IGluIHNobWVtIG1hcHBpbmcpLCB0aGVzZSB0d28gaGVscGVycyBiZWxvdyBjYW4gYmUgdXNlZFxcbiA0NTQ6XFx0ICogdG8gcHV0L2R1cCB0aGUgZW50cmllcyBkaXJlY3RseS5cXG4gNDU1OlxcdCAqXFxuIDQ1NjpcXHQgKiBBbGwgZW50cmllcyBtdXN0IGJlIGFsbG9jYXRlZCBieSBmb2xpb19hbGxvY19zd2FwKCkuIEFuZCB0aGV5IG11c3QgaGF2ZVxcbiA0NTc6XFx0ICogYSBzd2FwIGNvdW50IFxcdTAwM2UgMS4gU2VlIGNvbW1lbnRzIG9mIGZvbGlvXypfc3dhcCBoZWxwZXJzIGZvciBtb3JlIGluZm8uXFxuIDQ1ODpcXHQgKi9cXG4gNDU5OlxcdGludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbiA0NjA6XFx0dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0LypcXG4gNDYzOlxcdCAqIGZvbGlvX2ZyZWVfc3dhcCB0cmllcyB0byBmcmVlIHRoZSBzd2FwIGVudHJpZXMgcGlubmVkIGJ5IGEgc3dhcCBjYWNoZVxcbiA0NjQ6XFx0ICogZm9saW8sIGl0IGhhcyB0byBiZSBoZXJlIHRvIGJlIGNhbGxlZCBieSBvdGhlciBjb21wb25lbnRzLlxcbiA0NjU6XFx0ICovXFxuIDQ2NjpcXHRib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0LyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi9cXG4gNDY5OlxcdHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XFxuIDQ3MDpcXHR2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2c2ktXFx1MDAzZXVzZXJzKTtcXG4gNDc1OlxcdH1cXG4gNDc2OlxcdFxcbiA0Nzc6XFx0I2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cXG4gNDc4OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHJldHVybiBOVUxMO1xcbiA0ODE6XFx0fVxcbiA0ODI6XFx0XFxuIDQ4MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcXG4gNDg0OlxcdHtcXG4gNDg1OlxcdH1cXG4gNDg2OlxcdFxcbiA0ODc6XFx0I2RlZmluZSBnZXRfbnJfc3dhcF9wYWdlcygpXFx0XFx0XFx0MExcXG4gNDg4OlxcdCNkZWZpbmUgdG90YWxfc3dhcF9wYWdlc1xcdFxcdFxcdDBMXFxuIDQ4OTpcXHQjZGVmaW5lIHRvdGFsX3N3YXBjYWNoZV9wYWdlcygpXFx0XFx0XFx0MFVMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjE0LjIxNDg4MzU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTQwNzEwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXAgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZS4gSWYgYENPTkZJR19TV0FQYCBpc24ndCB0dXJuZWQgb24sIHRoZW4gYGdldF9ucl9zd2FwX3BhZ2VzKClgIGlzIGdvaW5nIHRvIHJldHVybiAwLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb25kaXRpb24gYGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDBgIGlzIGF1dG9tYXRpY2FsbHkgZmFsc2UuIFRoYXQgbWVhbnMgd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIHdvcnJ5IGFib3V0IGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AgYmVpbmcgZXZhbHVhdGVkIGluIGVpdGhlciB0aGUgc3RhbmRhcmQgb3IgbWVtY2cgc2NlbmFyaW9zLCBpdCBqdXN0IGdldHMgc2tpcHBlZC4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuUGx1cywgSSBzZWUgdGhhdCB0aGlzIG5ldyBoZWxwZXIsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGlzIGxvb2tpbmcgYXQgYE5SX1NXQVBDQUNIRWAgYW5kIHRoZW4gY2FsY3VsYXRpbmcgYW5vbiBwYWdlcyByZWxhdGl2ZSB0byB0aGUgc3dhcGNhY2hlLiBBbHJpZ2h0LCB0aGF0J3MgYSBrZXkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IHByZXNzdXJlIGNhbGN1bGF0aW9ucyBoZXJlLlxuXG5TbywgdGhlIHdob2xlIHRoaW5nIHJlYWxseSBoaW5nZXMgb24gYENPTkZJR19TV0FQYCBhbmQgYENPTkZJR19NRU1DR2AuIEdvdHRhIGNvbmZpcm0gdGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCBhcHByb3ByaWF0ZWx5LiBMZXQgbWUgdHJhY2sgZG93biB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gSSByZW1lbWJlciBzZWVpbmcgdGhlbSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLCBzbyBsZXQgbWUgcHVsbCB1cCB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdmVyaWZ5LiBSaWdodCwgYFNXQVBgIGFuZCBgTUVNQ0dgIGFyZSBib3RoIGluIGBpbml0L0tjb25maWdgLiBUaW1lIHRvIGNoZWNrIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoxNy4xMjg5NTg0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMTMwODcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoxNy4xNzQyODMyNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NzE0ODM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIGluc3RpbmN0LCB3aGVuIG5lZWRpbmcgdG8gZmlndXJlIG91dCBob3cgc3dhcHBpbmcgb3IgbWVtb3J5IGNncm91cCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBpbiB0aGlzIGtlcm5lbCwgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMgZGVmaW5lZCB0aGVyZSwgbWF5YmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19TV0FQYCBvciBgQ09ORklHX01FTUNHYCwgb3IgcGVyaGFwcyBldmVuIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGZlYXR1cmUncyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8sIHVuZGVyc3RhbmQgaG93IHRoZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gRnJvbSB0aGVyZSBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MTkuMzYxNDM1MzYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc5ODQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUHxjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjE5LjQxMjI0Mjk1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEzNzc2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBNRU1DRyBjb25maWd1cmF0aW9uLCB3aGljaCBtZWFucyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgaW5pdGlhbGl6YXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IGBpbml0L0tjb25maWdgIHNwZWNpZmljYWxseS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHdoZXJlIHRoZSBpbml0aWFsIG9wdGlvbnMgZm9yIGEgbG90IG9mIGNvcmUga2VybmVsIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCBhbmQgTUVNQ0cgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGV5J2QgYmUgZGVjbGFyZWQgdGhlcmUsIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIHRoZWlyIGRlZmF1bHQgZW5hYmxpbmcuIEhvcGVmdWxseSwgaXQncyBjbGVhcmx5IGxhaWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZGVwZW5kZW5jeSB0cmVlIHRoZXJlIGFmZmVjdHMgbXkgY3VycmVudCBwcm9ibGVtLiBHb3R0YSBtYWtlIHN1cmUgSSBhbHNvIGxvb2sgZm9yIHBvdGVudGlhbCBmZWF0dXJlIGZsYWcgZ3VhcmRzIGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc2NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjIxLjkyNjAyMjQzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMDIwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY2PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzUtXFxuaW5pdC9LY29uZmlnOjEwNzY6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzctXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkxLVxcbmluaXQvS2NvbmZpZzoxMDkyOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk4LVxcbmluaXQvS2NvbmZpZzoxMDk5OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjIxLjk3MTMzMTA2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcyMTkwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU1dBUCBhbmQgTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgU1dBUGAgYW5kIGBNRU1DR2AgYXJlIGNvbmZpZ3VyZWQgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgZGVlcGVyIGFuZCBlbnN1cmUgSSdtIGF3YXJlIG9mIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgcmVhZGluZyBhcm91bmQgYFNXQVBgIGVudHJpZXMgaW4gYG1tL0tjb25maWdgIGFuZCwgc2ltaWxhcmx5LCBJJ2xsIGZvY3VzIG9uIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb25zIGluIGBpbml0L0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhvc2Uga2V5d29yZHMsIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaW50ZXJhY3Qgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoyNC4yNDM1MjU2MDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0I1xcbiAgIDY6XFx0IyBGb3Igc29tZSByZWFzb24gbWljcm9ibGF6ZSBhbmQgbmlvczIgaGFyZCBjb2RlIFNXQVA9bi4gIEhvcGVmdWxseSB3ZSBjYW5cXG4gICA3OlxcdCMgYWRkIHByb3BlciBTV0FQIHN1cHBvcnQgdG8gdGhlbSwgaW4gd2hpY2ggY2FzZSB0aGlzIGNhbiBiZSByZW1vdmUuXFxuICAgODpcXHQjXFxuICAgOTpcXHRjb25maWcgQVJDSF9OT19TV0FQXFxuICAxMDpcXHRcXHRib29sXFxuICAxMTpcXHRcXG4gIDEyOlxcdG1lbnVjb25maWcgU1dBUFxcbiAgMTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfTk9fU1dBUFxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoyNC4yNDM2NDQ4MDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNDYwMjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoZSB3ZWVkcyBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyB6ZXJvIGluIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLlwiIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoYXQgZ2VuZXJhbCBhcmVhIGFyb3VuZCBsaW5lIDEwNzYuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byB3YW50IHRvIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcywgYW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIHRoZSBiZWhhdmlvciB3ZSdyZSBzZWVpbmcuIFRoaXMgdXN1YWxseSBjb250YWlucyB0aGUgYmFzaWMgZmVhdHVyZXMgb2YgYSBrZXJuZWwsIHNvIEknbSBob3BpbmcgdG8gaWRlbnRpZnkgd2hhdCBmZWF0dXJlcyBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBvciB3aGF0IGhhcyByZWNlbnRseSBiZWVuIG1vZGlmaWVkIHRvIGNhdXNlIHRoZSBjdXJyZW50IGlzc3VlLiBIb3BlZnVsbHkgdGhhdCBsaW5lIHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgcHJvYmxlbSBhdCBoYW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MjYuNjc4MjUxNTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDcxOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA3MjpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA3MzpcXHRcXG4xMDc0OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRjb25maWcgTUVNQ0dcXG4xMDc3OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwNzg6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwNzk6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgwOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgxOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODI6XFx0XFx0aGVscFxcbjEwODM6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4NjpcXHRcXHRib29sXFxuMTA4NzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA4ODpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA4OTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5MDpcXHRcXHRkZWZhdWx0IHlcXG4xMDkxOlxcdFxcbjEwOTI6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTA5MzpcXHRcXHRib29sXFxuMTA5NDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk3OlxcdFxcdGRlZmF1bHQgeVxcbjEwOTg6XFx0XFxuMTA5OTpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTAwOlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTEwMTpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwMjpcXHRcXHRkZWZhdWx0IG5cXG4xMTAzOlxcdFxcdGhlbHBcXG4xMTA0OlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTEwNTpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTEwNjpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTEwNzpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMDg6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjoyNi42NzgzODMwNjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQyMjU3NDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGRpZmYgc2hvd3Mgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2UgYGdldF9scnV2ZWNgIGhhcyBiZWVuIG1vdmVkIGFuZCBhIG5ldyBmdW5jdGlvbiwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhlIGxhdHRlciBhcHBlYXJzIHRvIGJlIHVzZWQgd2l0aGluIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGlzIGRvaW5nLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb2RlIGZvciBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLiBIbW0sIGl0J3MgY2FsY3VsYXRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYW5vbnltb3VzIHBhZ2VzIGFuZCBzd2FwIGNhY2hlIHBhZ2VzLCBsaWtlbHkgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIGluIGEgbG93LW1lbW9yeSBzaXR1YXRpb24uIFRoZSBjb3JlIGxvZ2ljIGhpbmdlcyBvbiBjb21wYXJpbmcgYHN3YXBjYWNoZWAgdG8gYSBmcmFjdGlvbiBvZiBgYW5vbl9wYWdlc2AgYW5kIGBTV0FQX0NMVVNURVJfTUFYYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIGRpZyBkZWVwZXIuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludDogaG93IGlzIGBscnV2ZWNgIG9idGFpbmVkPyBBaCwgYGdldF9scnV2ZWNgIGlzIHVzZWQuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvZGUgdXNlcyBgbWVtY2dgIHRvIHNlbGVjdCB0aGUgcmlnaHQgTFJVIHZlY3Rvci4gVGhlcmUncyBhIGAjaWZkZWYgQ09ORklHX01FTUNHYCBibG9jaywgd2hpY2ggaXMgZXhwZWN0ZWQuIEJ1dCBJIHNlZSB0aGlzIGBWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7YC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nLiBXYWl0IGEgbWludXRlLi4uIFdoYXQgaGFwcGVucyBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCAqYnV0KiBgbWVtY2dgIGlzIGBOVUxMYCwgYW5kIGAhbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlP1xuXG5XaGVuIHRoZSBzeXN0ZW0gcnVucyBnbG9iYWwgcmVjbGFpbSDigJMgdGhpbmsga3N3YXBkIG9yIGRpcmVjdCByZWNsYWltIGZvciB0aGUgd2hvbGUgbWVtb3J5IOKAkyBgbWVtY2dgICp3aWxsKiBiZSBgTlVMTGAuIFRoaXMgdHJpZ2dlcnMgdGhlIGBWTV9XQVJOX09OX09OQ0VgISBBbmQsIGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBub3QgZXhwbGljaXRseSBkaXNhYmxlZCAod2hpY2ggaXMgdGhlIGRlZmF1bHQgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBvbiBhbmQgYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgbm90IHVzZWQgYXQgYm9vdCksIGAhbWVtX2Nncm91cF9kaXNhYmxlZCgpYCB3aWxsICphbHdheXMqIGJlIHRydWUuXG5cblNvLCB0aGUgd2FybmluZyB3aWxsIGZpcmUgZHVyaW5nIGdsb2JhbCByZWNsYWltLCB3aGljaCBpcyBhIG1ham9yIHJlZCBmbGFnISBQcmV2aW91c2x5LCBgZ2V0X2xydXZlY2Agd2FzIG9ubHkgY2FsbGVkIGluIGNvbnRleHRzIHdoZXJlIGBtZW1jZ2Agd2FzIHByb3Blcmx5IGhhbmRsZWQgb3IgY2hlY2tlZCwgbGlrZSBpbiBtdWx0aS1nZW4gTFJVLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgZ2V0X2xydXZlY2Agd2FzICpwcmV2aW91c2x5KiBjYWxsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuIFRoaXMgbG9va3MgbGlrZSBhIHJlZ3Jlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MTI6MzIuMTAwOTYyNTE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc5MDExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTMyMj1zdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMzQxLVxcbm1tL3Ztc2Nhbi5jOjM0MjpzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtMzQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM2Mj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY0LXtcXG5tbS92bXNjYW4uYzozNjU6XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy0zNjYtXFx0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XFxuLS1cXG5tbS92bXNjYW4uYz0yMzIxPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjMyMy1cXHR1bnNpZ25lZCBsb25nIGZpbGU7XFxubW0vdm1zY2FuLmM6MjMyNDpcXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jLTIzMjUtXFxuLS1cXG5tbS92bXNjYW4uYy0yMzI4LVxcbm1tL3Ztc2Nhbi5jOjIzMjk6XFx0dGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgcGdkYXQpO1xcbm1tL3Ztc2Nhbi5jLTIzMzAtXFxuLS1cXG5tbS92bXNjYW4uYy0yMzQwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjIzNDE6XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbm1tL3Ztc2Nhbi5jOjIzNDI6XFx0c2MtXFx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG5tbS92bXNjYW4uYzoyMzQzOlxcdHNjLVxcdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3Q7XFxubW0vdm1zY2FuLmM6MjM0NDpcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG5tbS92bXNjYW4uYy0yMzQ1LVxcbi0tXFxubW0vdm1zY2FuLmMtMjM1Ny1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzoyMzU4OlxcdFxcdHJlZmF1bHRzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcXG5tbS92bXNjYW4uYy0yMzU5LVxcdFxcdFxcdFxcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTik7XFxubW0vdm1zY2FuLmM6MjM2MDpcXHRcXHRpZiAocmVmYXVsdHMgIT0gdGFyZ2V0X2xydXZlYy1cXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9BTk9OXSB8fFxcbm1tL3Ztc2Nhbi5jOjIzNjE6XFx0XFx0XFx0aW5hY3RpdmVfaXNfbG93KHRhcmdldF9scnV2ZWMsIExSVV9JTkFDVElWRV9BTk9OKSlcXG5tbS92bXNjYW4uYy0yMzYyLVxcdFxcdFxcdHNjLVxcdTAwM2VtYXlfZGVhY3RpdmF0ZSB8PSBERUFDVElWQVRFX0FOT047XFxuLS1cXG5tbS92bXNjYW4uYy0yMzY1LVxcbm1tL3Ztc2Nhbi5jOjIzNjY6XFx0XFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTIzNjctXFx0XFx0XFx0XFx0V09SS0lOR1NFVF9BQ1RJVkFURV9GSUxFKTtcXG5tbS92bXNjYW4uYzoyMzY4OlxcdFxcdGlmIChyZWZhdWx0cyAhPSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VyZWZhdWx0c1tXT1JLSU5HU0VUX0ZJTEVdIHx8XFxubW0vdm1zY2FuLmM6MjM2OTpcXHRcXHQgICAgaW5hY3RpdmVfaXNfbG93KHRhcmdldF9scnV2ZWMsIExSVV9JTkFDVElWRV9GSUxFKSlcXG5tbS92bXNjYW4uYy0yMzcwLVxcdFxcdFxcdHNjLVxcdTAwM2VtYXlfZGVhY3RpdmF0ZSB8PSBERUFDVElWQVRFX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYy0yMzgwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjIzODE6XFx0ZmlsZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jLTIzODItXFx0aWYgKGZpbGUgXFx1MDAzZVxcdTAwM2Ugc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwMjZcXHUwMDI2ICEoc2MtXFx1MDAzZW1heV9kZWFjdGl2YXRlIFxcdTAwMjYgREVBQ1RJVkFURV9GSUxFKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmM9Mjg4OT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkwMi1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG5tbS92bXNjYW4uYzoyOTAzOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtMjkwNC1cXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MTY9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzItXFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG5tbS92bXNjYW4uYzoyOTMzOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtMjkzNC1cXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzNzI9dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy00Mzc5LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG5tbS92bXNjYW4uYzo0MzgwOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtNDM4MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzOTc9dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtNDQwMS1cXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbm1tL3Ztc2Nhbi5jOjQ0MDI6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy00NDAzLVxcbi0tXFxubW0vdm1zY2FuLmM9NDQwOD12b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy00NDE0LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG5tbS92bXNjYW4uYzo0NDE1OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtNDQxNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0MzQ9dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDQzNS17XFxubW0vdm1zY2FuLmM6NDQzNjpcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jLTQ0MzctXFxuLS1cXG5tbS92bXNjYW4uYz00NDQzPWJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDQ0NC17XFxubW0vdm1zY2FuLmM6NDQ0NTpcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jLTQ0NDYtXFx0aW50IHR5cGU7XFxuLS1cXG5tbS92bXNjYW4uYz00NDkwPXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ0OTEte1xcbm1tL3Ztc2Nhbi5jOjQ0OTI6XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy00NDkzLVxcdGludCB0eXBlO1xcbi0tXFxubW0vdm1zY2FuLmM9NDU2Mj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU2OC1cXG5tbS92bXNjYW4uYzo0NTY5OlxcdGNoaWxkX2xydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmM6NDU3MDpcXHRwYXJlbnRfbHJ1dmVjID0gZ2V0X2xydXZlYyhwYXJlbnQsIG5pZCk7XFxubW0vdm1zY2FuLmMtNDU3MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODM9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTMwOC1cXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbm1tL3Ztc2Nhbi5jOjUzMDk6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01MzEwLVxcbi0tXFxubW0vdm1zY2FuLmM9NTQyNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0MzktXFx0XFx0XFx0aWYgKCFucl90b19za2lwLS0pXFxubW0vdm1zY2FuLmM6NTQ0MDpcXHRcXHRcXHRcXHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01NDQxLVxcdFxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NTY9c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0NzEtXFxubW0vdm1zY2FuLmM6NTQ3MjpcXHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01NDczLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU2MzQ9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY1My1cXHRzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZztcXG5tbS92bXNjYW4uYzo1NjU0OlxcdGxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxubW0vdm1zY2FuLmMtNTY1NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4Mjk9dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtNTgzNy1cXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbm1tL3Ztc2Nhbi5jOjU4Mzg6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYy01ODM5LVxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjE2ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNjYtXFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xcbm1tL3Ztc2Nhbi5jOjYxNjc6XFx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcXG5tbS92bXNjYW4uYy02MTY4LVxcdGJvb2wgcmVjbGFpbWFibGUgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNzgtXFxubW0vdm1zY2FuLmM6NjE3OTpcXHR0YXJnZXRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCBwZ2RhdCk7XFxubW0vdm1zY2FuLmMtNjE4MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDMtXFx0XFx0aWYgKGNncm91cF9yZWNsYWltKHNjKSBcXHUwMDI2XFx1MDAyNiB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSlcXG5tbS92bXNjYW4uYzo2MjQ0OlxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX0NHUk9VUF9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxubW0vdm1zY2FuLmMtNjI0NS1cXG5tbS92bXNjYW4uYy02MjQ2LVxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jOjYyNDc6XFx0XFx0XFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxubW0vdm1zY2FuLmMtNjI0OC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy02MjU3LVxcdCAgICAhc2MtXFx1MDAzZWhpYmVybmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo2MjU4OlxcdCAgICAodGVzdF9iaXQoTFJVVkVDX0NHUk9VUF9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncykgfHxcXG5tbS92bXNjYW4uYzo2MjU5OlxcdCAgICAgdGVzdF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpKSlcXG5tbS92bXNjYW4uYy02MjYwLVxcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9DT05HRVNURUQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjQ0MT1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTY0NDIte1xcbm1tL3Ztc2Nhbi5jOjY0NDM6XFx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcXG5tbS92bXNjYW4uYy02NDQ0LVxcdHVuc2lnbmVkIGxvbmcgcmVmYXVsdHM7XFxuLS1cXG5tbS92bXNjYW4uYy02NDQ4LVxcbm1tL3Ztc2Nhbi5jOjY0NDk6XFx0dGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHRhcmdldF9tZW1jZywgcGdkYXQpO1xcbm1tL3Ztc2Nhbi5jOjY0NTA6XFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0FOT04pO1xcbm1tL3Ztc2Nhbi5jOjY0NTE6XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9BTk9OXSA9IHJlZmF1bHRzO1xcbm1tL3Ztc2Nhbi5jOjY0NTI6XFx0cmVmYXVsdHMgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jOjY0NTM6XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlcmVmYXVsdHNbV09SS0lOR1NFVF9GSUxFXSA9IHJlZmF1bHRzO1xcbm1tL3Ztc2Nhbi5jLTY0NTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjozMi4xNDg3NTg4MjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2MjYzMTYwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTWVtb3J5IFJlY2xhaW0gTG9naWMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBjb2RlIGNoYW5nZSBhcyBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBzaXR1YXRpb24gdGhhdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSd2ZSBzcG90dGVkIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBuZXcgY2FsbCB0byBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYW5kIGEgbW92ZSBjb25jZXJuaW5nIGBnZXRfbHJ1dmVjKClgLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IHdoZW4gd2UncmUgKm5vdCogZGVhbGluZyB3aXRoIG1lbWNncyAod2hpY2ggaXMgdGhlIHN0YW5kYXJkLCBkZWZhdWx0IHNldHVwKSwgYW5kIGBDT05GSUdfTUVNQ0dgIGlzICplbmFibGVkKiDigJMgYSB2ZXJ5IGNvbW1vbiBzY2VuYXJpbyDigJMgY2FsbGluZyBgZ2V0X2xydXZlYyhOVUxMLCBuaWQpYCB0cmlnZ2VycyBhIGBWTV9XQVJOX09OX09OQ0VgIGFzc2VydGlvbiwgd2hpY2ggaXMgYSBrZXJuZWwgd2FybmluZy4gVGhpcyBpcyBoYXBwZW5pbmcgYmVjYXVzZSBvZiBhIGNoZWNrIHJlbGF0ZWQgdG8gbWVtY2cgbm90IGJlaW5nIGRpc2FibGVkIHdoZW4gYG1lbWNnYCBpcyBudWxsLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBub24tbWVtY2cgcmVjbGFpbSBwYXRoIGhhcyBiZWVuIGFsdGVyZWQuIEZ1cnRoZXJtb3JlLCB0aGVyZSdzIGEgY2hhbmdlIGluIGhvdyB0aGUgTFJVIHNjYW5uaW5nIGlzIGJhbGFuY2VkIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIHBhZ2VzIHVuZGVyIHN3YXAgcHJlc3N1cmUuIFRoZSBsb2dpYyBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gaG93IHdlIGRlY2lkZSB0byByZWNsYWltIGFub24gcGFnZXMsIGVzcGVjaWFsbHkgd2hlbiBzd2FwIGlzIHByZXNlbnQuIEl0IGNvdWxkIGFmZmVjdCB0aGUgYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgcGFnZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuXG5XZSBoYXZlIGEgY2xlYXIgcGF0aCB0aGF0IGxlYWRzIHRvIHRoaXMgYXNzZXJ0aW9uIG9yIGFsdGVyZWQgYmVoYXZpb3IgYW5kIGFmZmVjdHMgcmVjbGFpbS9zY2FubmluZy4gU28sIGl0J3Mgd29ydGggZnV6emluZyB0byBleHBsb3JlIHRoaXMgcGF0aC5cblxuRm9yIEZvY3VzU3ltYm9scywgaGVyZSdzIHdoYXQgc3RhbmRzIG91dDogYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLCBgZ2V0X2xydXZlY2AsIGBnZXRfc2Nhbl9jb3VudGAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYW5kIGBzaHJpbmtfbHJ1dmVjYC4gVGhlc2UgYXJlIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGNoYW5nZWQgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIExSVSBzY2FubmluZyBhbmQgYW5vbiBwYWdlIHJlY2xhbWF0aW9uLiBUaGV5IGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBpbnRvIHRoZSBtb2RpZmllZCBsb2dpYy5cblxuQW5kLCBvZiBjb3Vyc2UsIGZvciBlbmFibGluZyBjb25maWdzLCB3ZSdsbCBuZWVkIGBTV0FQYCBiZWNhdXNlIG9mIHRoZSBgZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMGAgY2hlY2sgYW5kIHN3YXAgY2FjaGUgbG9naWMsIGFuZCBgTUVNQ0dgIGJlY2F1c2UgaXQncyByZXF1aXJlZCBmb3IgdGhlIGFzc2VydGlvbiB0aGF0IG9jY3VycyB3aGVuIGBnZXRfbHJ1dmVjYCBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgbWVtY2cgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLCBhbmQgYWxzbyBmb3IgdGhlIGNhbGwgcGF0aCBpbiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3NSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjQzLjc3NTA3ODYwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTQyNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfbHJ1dmVjXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgaW50byBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgdG8gZ2F0ZSBhbm9uIHBhZ2Ugc2Nhbm5pbmcgYmFzZWQgb24gc3dhcGNhY2hlIGxldmVscy4gQWRkaXRpb25hbGx5LCBjYWxsaW5nIGdldF9scnV2ZWMoKSB3aXRoIGEgTlVMTCBtZW1jZyBpbiBub24tbWVtY2cgcmVjbGFpbSBwYXRocyB1bmRlciBDT05GSUdfTUVNQ0cgZXhlY3V0ZXMgVk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpLCBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgYXNzZXJ0aW9uIHRyaWdnZXJzIGFuZCBhbHRlcmluZyBzY2FuIGJhbGFuY2UgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVjbGFpbWFibGVfYW5vbl9pc19sb3dcIixcbiAgICBcImNhbl9yZWNsYWltX2Fub25fcGFnZXNcIixcbiAgICBcImdldF9scnV2ZWNcIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJ6b25lX3JlY2xhaW1hYmxlX3BhZ2VzXCIsXG4gICAgXCJzaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGFub255bW91cyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSBpbnRvIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSB0byBnYXRlIGFub24gcGFnZSBzY2FubmluZyBiYXNlZCBvbiBzd2FwY2FjaGUgbGV2ZWxzLiBBZGRpdGlvbmFsbHksIGNhbGxpbmcgZ2V0X2xydXZlYygpIHdpdGggYSBOVUxMIG1lbWNnIGluIG5vbi1tZW1jZyByZWNsYWltIHBhdGhzIHVuZGVyIENPTkZJR19NRU1DRyBleGVjdXRlcyBWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSksIGludHJvZHVjaW5nIHBvdGVudGlhbCBhc3NlcnRpb24gdHJpZ2dlcnMgYW5kIGFsdGVyaW5nIHNjYW4gYmFsYW5jZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjQzLjg1ODYyOTI1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzUyNDI1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjo0My44NTkwOTExODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzUzNDc3NjMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbiBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBpbnRyb2R1Y2luZyB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGhlbHBlciBhbmQgaW52b2tpbmcgaXQgZnJvbSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVG8gc3VwcG9ydCB0aGlzLCBgZ2V0X2xydXZlYygpYCBpcyByZWxvY2F0ZWQgZWFybGllciBpbiB0aGUgZmlsZS5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbm9uX3BhZ2VzYCwgYHN3YXBjYWNoZWAsIGBscnV2ZWNgKSBhcmUgaW1tZWRpYXRlbHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcga2VybmVsIHN0YXRlIGZ1bmN0aW9ucyAoYGdldF9scnV2ZWMoKWAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZSgpYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkbyBub3QgbW9kaWZ5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZywgZG8gbm90IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIGFjcm9zcyBrZXJuZWwvdXNlciBib3VuZGFyaWVzIChlLmcuIHZpYSBjb3B5X3RvX3VzZXIgb3IgbmV0bGluayksIGFuZCBkbyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG5cXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaW52YWxpZCBzdHJ1Y3QgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwN2Y5NTdmYjgxNWQxMDZjNzA3MTVmOGRjZDg4MzBlY2I5Yjg2NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjExOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uMTkyYmQwOTgwMTIxNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTMzOSw2ICszMzksNDIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdHJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuK3tcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRpZiAobWVtY2cpIHtcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gXHUwMDI2bWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWM7XG4rXG4rXHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBtZW1fY2dyb3VwX2xydXZlYygpICovXG4rXHRcdGlmICghbHJ1dmVjLVx1MDAzZXBnZGF0KVxuK1x0XHRcdGxydXZlYy1cdTAwM2VwZ2RhdCA9IHBnZGF0O1xuK1xuK1x0XHRyZXR1cm4gbHJ1dmVjO1xuK1x0fVxuKyNlbmRpZlxuK1x0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuK1x0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4rXG4rXHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4rXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4rXG4rXHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNiwgU1dBUF9DTFVTVEVSX01BWCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuQEAgLTM0OCwxMSArMzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxuIFx0XHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4gXHRcdCAqL1xuLVx0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMClcbitcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xuLVx0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDApXG4rXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG5AQCAtMjY3NCwyNiArMjcxMiw2IEBAIHN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbiAjZGVmaW5lIGdldF9tZW1jZ19nZW4oc2VxKVx0KChzZXEpICUgTUVNQ0dfTlJfR0VOUylcbiAjZGVmaW5lIGdldF9tZW1jZ19iaW4oYmluKVx0KChiaW4pICUgTUVNQ0dfTlJfQklOUylcbiBcbi1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuLVxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdGlmIChtZW1jZykge1xuLVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcdTAwMjZtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlYztcbi1cbi1cdFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cbi1cdFx0aWYgKCFscnV2ZWMtXHUwMDNlcGdkYXQpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZXBnZGF0ID0gcGdkYXQ7XG4tXG4tXHRcdHJldHVybiBscnV2ZWM7XG4tXHR9XG4tI2VuZGlmXG4tXHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG4tXG4tXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjQzLjg1OTA5MjA3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ5ODU1Mzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5IGluIGBtbS92bXNjYW4uY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBtbS92bXNjYW4uY2AgdGhhdCBtb3ZlcyBgZ2V0X2xydXZlYygpYCB1cCBpbiB0aGUgZmlsZSBhbmQgaW50cm9kdWNlcyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAsIHdoaWNoIGlzIHRoZW4gdXNlZCBieSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYC4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgS01TQU4gb3IgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgZm9yIHRoaXMgY29kZSBjaGFuZ2UuIEdpdmVuIG15IGV4cGVydGlzZSwgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgLSBpdCdzIGEgY29kZSByZXZpZXcsIHNwZWNpZmljYWxseSBldmFsdWF0aW5nIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoZSBzZXZlcml0eSBpcyBsb3csIGFzIGl0J3MgYSBkZWZlbnNpdmUgcmV2aWV3LlxuXG5GaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZS4gYGdldF9scnV2ZWMoKWAgaXMgbW92ZWQgYW5kIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbi4gSSdsbCBmb2N1cyBvbiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgYmVjYXVzZSBpdCdzIG5ldy4gIEkgc2VlIHRoYXQgaXQgdGFrZXMgYG1lbWNnYCwgYG5pZGAsIGFuZCBhIGBzY2FuX2NvbnRyb2xgIHN0cnVjdHVyZSAoYHNjYCkgYXMgaW5wdXQuICBJbnNpZGUsIGl0IGdldHMgdGhlIGBscnV2ZWNgIGFuZCBjYWxjdWxhdGVzIGBhbm9uX3BhZ2VzYCBhbmQgYHN3YXBjYWNoZWAuIEl0IHJldHVybnMgYSBib29sZWFuIGJhc2VkIG9uIGEgY29tcGFyaXNvbiBiZXR3ZWVuIGBzd2FwY2FjaGVgIGFuZCBhIHZhbHVlIGRlcml2ZWQgZnJvbSBgYW5vbl9wYWdlc2AuIFRoaXMgbG9va3MgbGlrZSBzb21lIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGhldXJpc3RpYyB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHRocm90dGxlIGFub255bW91cyBwYWdlIHJlY2xhaW0gYmFzZWQgb24gc3dhcCBjYWNoZSBsZXZlbHMgYW5kIElPIGNvbnN0cmFpbnRzLlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gIFRoZSBjb2RlIGNoZWNrcyBpZiBgc2NgIGlzIE5VTEwuIGBscnV2ZWNgIGlzIGFzc2lnbmVkIHRoZSByZXR1cm4gb2YgYGdldF9scnV2ZWMoKWAsIHdoaWNoIGxvb2tzIHNhZmUuICBgYW5vbl9wYWdlc2AgYW5kIGBzd2FwY2FjaGVgIGFyZSBzY2FsYXIgdmFyaWFibGVzIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgY2FsbHMgdG8gYGxydXZlY19wYWdlX3N0YXRlKClgLiBUaGUgY2FsY3VsYXRpb24gaXMgYSBwdXJlIGludGVnZXIgY2FsY3VsYXRpb24uICBObyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGhlcmUsIG5vIGRpcmVjdCBtZW1vcnkgYWNjZXNzIHRvIHVzZXItc3BhY2UsIG5vIHN0cnVjdCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCwgbm8gcG90ZW50aWFsIGZvciBpbmZvIGxlYWtzIG9yIHBhZGRpbmcgbGVha3MgZnJvbSB0aGUgbG9va3Mgb2YgaXQuIEV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgc2NvcGVkLiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncyBhdCBhbGwuXG5cblRvIGJlIGV4dHJhIHRob3JvdWdoLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGNhbGxlcnMgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIEknbGwgcnVuIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLCBidXQgYmFzZWQgb24gdGhlIGNvZGUgaXRzZWxmLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhbmQgbG9jYWxpemVkIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTm8gS01TQU4gZmxhZ3Mgc2VlbSBhcHBsaWNhYmxlIGhlcmUuIEl0J3MgbGlrZWx5IEtBU0FOIGlzIGFscmVhZHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLCBhbmQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgdGhlIGNvZGUgZG9lcyBub3Qgc2VlbSB0byBoYXZlIGFueSBvZiB0aGUgaXNzdWVzIEtNU0FOIGRlYWxzIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMjo1Ny4zNTc2NDk4NDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRcXHRpZiAoc2MgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZW5vX2RlbW90aW9uKVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdkYXQsIFxcdTAwMjZhbGxvd2VkX21hc2spO1xcbiAzMzQ6XFx0XFx0aWYgKG5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzaykpXFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qIEZpbHRlciBvdXQgbm9kZXMgdGhhdCBhcmUgbm90IGluIGNncm91cCdzIG1lbXNfYWxsb3dlZC4gKi9cXG4gMzM4OlxcdFxcdG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChtZW1jZywgXFx1MDAyNmFsbG93ZWRfbWFzayk7XFxuIDMzOTpcXHRcXHRyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4gMzQzOlxcdHtcXG4gMzQ0OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiAzNDc6XFx0XFx0aWYgKG1lbWNnKSB7XFxuIDM0ODpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlYztcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIG1lbV9jZ3JvdXBfbHJ1dmVjKCkgKi9cXG4gMzUxOlxcdFxcdFxcdGlmICghbHJ1dmVjLVxcdTAwM2VwZ2RhdClcXG4gMzUyOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlcGdkYXQgPSBwZ2RhdDtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuIGxydXZlYztcXG4gMzU1OlxcdFxcdH1cXG4gMzU2OlxcdCNlbmRpZlxcbiAzNTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRyZXR1cm4gXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYztcXG4gMzYwOlxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gMzYzOlxcdFxcdFxcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiAzNjQ6XFx0e1xcbiAzNjU6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG4gMzY2OlxcdFxcdHVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRpZiAoIXNjIHx8IChzYy1cXHUwMDNlZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9JTykpXFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4gMzcyOlxcdFxcdFxcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XFxuIDM3MzpcXHRcXHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XFxuIDM3NDpcXHRcXG4gMzc1OlxcdFxcdHJldHVybiBzd2FwY2FjaGUgXFx1MDAzYyBtaW4oYW5vbl9wYWdlcyBcXHUwMDNlXFx1MDAzZSA2LCBTV0FQX0NMVVNURVJfTUFYKTtcXG4gMzc2OlxcdH1cXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAzNzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbiAzODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdGlmIChtZW1jZyA9PSBOVUxMKSB7XFxuIDM4MzpcXHRcXHRcXHQvKlxcbiAzODQ6XFx0XFx0XFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxcbiAzODU6XFx0XFx0XFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbiAzODY6XFx0XFx0XFx0ICovXFxuIDM4NzpcXHRcXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gMzg4OlxcdFxcdFxcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxcbiAzODk6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDM5MDpcXHRcXHR9IGVsc2Uge1xcbiAzOTE6XFx0XFx0XFx0LyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqL1xcbiAzOTI6XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiAzOTM6XFx0XFx0XFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXFxuIDM5NDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzk1OlxcdFxcdH1cXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0LypcXG4gMzk4OlxcdFxcdCAqIFRoZSBwYWdlIGNhbiBub3QgYmUgc3dhcHBlZC5cXG4gMzk5OlxcdFxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjEyOjU3LjM1ODA4MjE4N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM1NzY0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBwYXRjaCBvdmVyLCBhbmQgaG9uZXN0bHksIGl0J3MgcHJldHR5IGNsZWFuIGFuZCBkaXJlY3QuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgbG9jYWxpemVkIGFuZCBzZW5zaWJsZS4gSXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgcmVhcnJhbmdpbmcgdGhlIGBnZXRfbHJ1dmVjKClgIGhlbHBlciB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggbWFrZXMgaXQgbW9yZSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBmaW5lLiBUaGUgcmVhbCBtZWF0IG9mIGl0IGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBmdW5jdGlvbidzIGpvYiBpcyB0byBjaGVjayBpZiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byBhbm9ueW1vdXMgcGFnZXMsIGJ1dCBvbmx5IGlmIHdlJ3JlICpub3QqIGRlYWxpbmcgd2l0aCBkaXJlY3QgSS9PLCBqdWRnaW5nIGJ5IHRoZSBgIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pYCBjaGVjay4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlbiB0aGUgcGF0Y2gganVzdCBjYWxscyB0aGlzIG5ldyBmdW5jdGlvbiB3aXRoaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuXG5cbkNyaXRpY2FsbHksIHRoZXJlIGFyZSBubyByZWQgZmxhZ3MgaGVyZSwgbm90aGluZyB0aGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb25cIiBvciBcImRhdGEgbGVha1wiLiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vdGhpbmcgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgcmVhZCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGVzIHdpdGhpbiB0aGUgbmV3IGZ1bmN0aW9uIGFyZSBhbGwgbG9jYWwgYW5kIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHdoaWNoIGlzIGV4Y2VsbGVudC4gTm8gbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnMgb3IgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIHRoYXQganVtcCBvdXQgYXQgbWUuXG5cbkdpdmVuIHRoZSBzaW1wbGljaXR5IGFuZCB0aGUgZm9jdXNlZCBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgSSBkb24ndCBzZWUgYW55IG5lZWQgZm9yIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBjb25maWd1cmF0aW9ucyBzaG91bGQgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB2ZXJ5IHRhcmdldGVkIGNoYW5nZXMgd2l0aCBtaW5pbWFsIGNvbXBsZXhpdHksIGFuZCB0aGUgZXhpc3RpbmcgY2hlY2tzLCBjb21iaW5lZCB3aXRoIHRoZSBsYWNrIG9mIGFueSBzaWduaWZpY2FudCBtZW1vcnkgbWFuYWdlbWVudCBvciBzZWN1cml0eSBjb25jZXJucywgcmVuZGVycyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3OCwiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToxMzowMS4zOTM4NDk5NjFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGFub255bW91cyBwYWdlIHJlY2xhaW0gZGVjaXNpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgaW50cm9kdWNpbmcgdGhlIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBoZWxwZXIgYW5kIGludm9raW5nIGl0IGZyb20gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAuIFRvIHN1cHBvcnQgdGhpcywgYGdldF9scnV2ZWMoKWAgaXMgcmVsb2NhdGVkIGVhcmxpZXIgaW4gdGhlIGZpbGUuXFxuXFxuQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgLCBgbHJ1dmVjYCkgYXJlIGltbWVkaWF0ZWx5IGFuZCBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIGtlcm5lbCBzdGF0ZSBmdW5jdGlvbnMgKGBnZXRfbHJ1dmVjKClgIGFuZCBgbHJ1dmVjX3BhZ2Vfc3RhdGUoKWApLiBUaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG8gbm90IG1vZGlmeSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcsIGRvIG5vdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY3Jvc3Mga2VybmVsL3VzZXIgYm91bmRhcmllcyAoZS5nLiB2aWEgY29weV90b191c2VyIG9yIG5ldGxpbmspLCBhbmQgZG8gbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXFxuXFxuQW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgc3RydWN0IGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9uIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGludHJvZHVjaW5nIHRoZSBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgaGVscGVyIGFuZCBpbnZva2luZyBpdCBmcm9tIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLiBUbyBzdXBwb3J0IHRoaXMsIGBnZXRfbHJ1dmVjKClgIGlzIHJlbG9jYXRlZCBlYXJsaWVyIGluIHRoZSBmaWxlLlxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYGFub25fcGFnZXNgLCBgc3dhcGNhY2hlYCwgYGxydXZlY2ApIGFyZSBpbW1lZGlhdGVseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBrZXJuZWwgc3RhdGUgZnVuY3Rpb25zIChgZ2V0X2xydXZlYygpYCBhbmQgYGxydXZlY19wYWdlX3N0YXRlKClgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvIG5vdCBtb2RpZnkgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLCBkbyBub3QgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgYWNyb3NzIGtlcm5lbC91c2VyIGJvdW5kYXJpZXMgKGUuZy4gdmlhIGNvcHlfdG9fdXNlciBvciBuZXRsaW5rKSwgYW5kIGRvIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxcblxcbkFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBpbnZhbGlkIHN0cnVjdCBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnIGNvbmZpZ3VyYXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[1] Phase: Succeeded StartedAt: 2026-09-04 05:13:13 +0000 UTC FinishedAt: 2026-09-04 05:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 05:13:13 +0000 UTC FinishedAt: 2026-09-04 05:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2] Phase: Succeeded StartedAt: 2026-09-04 05:13:13 +0000 UTC FinishedAt: 2026-09-04 08:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 05:13:13 +0000 UTC FinishedAt: 2026-09-04 08:52:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 05:13:13 +0000 UTC FinishedAt: 2026-09-04 05:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 05:13:13 +0000 UTC FinishedAt: 2026-09-04 05:13:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-convert-artifact-634107377/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 05:13:23 +0000 UTC FinishedAt: 2026-09-04 05:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 05:13:23 +0000 UTC FinishedAt: 2026-09-04 05:29:18 +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:*b762e9ac-04af-4166-b848-4c90c64956ff,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-workflow8nmwh/series-workflow8nmwh-convert-artifact-634107377/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": "5e795da7-3caa-4c1f-8117-9912d1e2b8fd", "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-workflow8nmwh/series-workflow8nmwh-build-action-1379299359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 05:13:23 +0000 UTC FinishedAt: 2026-09-04 05:29:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b762e9ac-04af-4166-b848-4c90c64956ff,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-workflow8nmwh/series-workflow8nmwh-convert-artifact-634107377/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": "5e795da7-3caa-4c1f-8117-9912d1e2b8fd", "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-workflow8nmwh/series-workflow8nmwh-build-action-1379299359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 05:29:18 +0000 UTC FinishedAt: 2026-09-04 05:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 05:29:18 +0000 UTC FinishedAt: 2026-09-04 05:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 05:29:18 +0000 UTC FinishedAt: 2026-09-04 05:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 05:29:18 +0000 UTC FinishedAt: 2026-09-04 05:29:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-convert-artifact-1468235332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 05:29:28 +0000 UTC FinishedAt: 2026-09-04 05:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 05:29:28 +0000 UTC FinishedAt: 2026-09-04 05:31:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e795da7-3caa-4c1f-8117-9912d1e2b8fd,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-workflow8nmwh/series-workflow8nmwh-build-action-1379299359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 05:31:31 +0000 UTC FinishedAt: 2026-09-04 05:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 05:31:31 +0000 UTC FinishedAt: 2026-09-04 05:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 05:31:31 +0000 UTC FinishedAt: 2026-09-04 05:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 05:31:31 +0000 UTC FinishedAt: 2026-09-04 05:47:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b762e9ac-04af-4166-b848-4c90c64956ff,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-workflow8nmwh/series-workflow8nmwh-convert-artifact-1468235332/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": "4d090112-0f40-448d-9ef7-4ba95bf58f56", "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-workflow8nmwh/series-workflow8nmwh-build-action-3338249808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 05:31:31 +0000 UTC FinishedAt: 2026-09-04 05:47:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b762e9ac-04af-4166-b848-4c90c64956ff,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-workflow8nmwh/series-workflow8nmwh-convert-artifact-1468235332/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": "4d090112-0f40-448d-9ef7-4ba95bf58f56", "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-workflow8nmwh/series-workflow8nmwh-build-action-3338249808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 05:47:13 +0000 UTC FinishedAt: 2026-09-04 05:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 05:47:13 +0000 UTC FinishedAt: 2026-09-04 05:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 05:47:13 +0000 UTC FinishedAt: 2026-09-04 05:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 05:47:13 +0000 UTC FinishedAt: 2026-09-04 05:49:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4d090112-0f40-448d-9ef7-4ba95bf58f56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-build-action-3338249808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 05:49:51 +0000 UTC FinishedAt: 2026-09-04 08:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 05:49:51 +0000 UTC FinishedAt: 2026-09-04 08:52:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5e795da7-3caa-4c1f-8117-9912d1e2b8fd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4d090112-0f40-448d-9ef7-4ba95bf58f56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-build-action-1379299359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-build-action-3338249808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 05:49:51 +0000 UTC FinishedAt: 2026-09-04 05:50:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 05:49:51 +0000 UTC FinishedAt: 2026-09-04 05:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},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-workflow8nmwh/series-workflow8nmwh-convert-artifact-232793421/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 05:49:51 +0000 UTC FinishedAt: 2026-09-04 05:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 05:49:51 +0000 UTC FinishedAt: 2026-09-04 05:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 05:49:51 +0000 UTC FinishedAt: 2026-09-04 05:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 05:50:01 +0000 UTC FinishedAt: 2026-09-04 08:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8nmwh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_lruvec","get_scan_count","zone_reclaimable_pages","shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"49c067a6-e51f-4912-8631-337644bd7fcb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 05:50:01 +0000 UTC FinishedAt: 2026-09-04 08:52:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e795da7-3caa-4c1f-8117-9912d1e2b8fd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4d090112-0f40-448d-9ef7-4ba95bf58f56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-build-action-1379299359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-build-action-3338249808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8nmwh/series-workflow8nmwh-convert-artifact-232793421/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}