PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPjxodG1sPjxoZWFkPjx0aXRsZT5BcGFjaGUgU2FuZGVzaGEyL0MgLSBQcm9qZWN0IFRlYW08L3RpdGxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCI+CiAgICAgICAgICBAaW1wb3J0IHVybCgiLi9zdHlsZS9tYXZlbi1iYXNlLmNzcyIpOwogICAgICAgICAgCgkJCSAgICBAaW1wb3J0IHVybCgiLi9zdHlsZS9tYXZlbi1jbGFzc2ljLmNzcyIpOzwvc3R5bGU+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL3N0eWxlL3ByaW50LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJwcmludCI+PC9saW5rPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjwvbWV0YT48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgCSAgZnVuY3Rpb24gb2Zmc2V0RGF0ZShpZCwgb2Zmc2V0KSB7CgogICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSA7CiAgICAgICAgICAgIHZhciBub3dUaW1lID0gbm93LmdldFRpbWUoKSA7CiAgICAgICAgICAgIHZhciBsb2NhbE9mZnNldCA9IG5vdy5nZXRUaW1lem9uZU9mZnNldCgpIDsKICAgICAgICAgICAgdmFyIGRldmVsb3BlclRpbWUgPSBub3dUaW1lICsgKG9mZnNldCAqIDYwICogNjAgKiAxMDAwKSArIChsb2NhbE9mZnNldCAqIDYwICogMTAwMCkgOwogICAgICAgICAgICB2YXIgZGV2ZWxvcGVyRGF0ZSA9IG5ldyBEYXRlKGRldmVsb3BlclRpbWUpIDsKCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5pbm5lckhUTUwgPSBkZXZlbG9wZXJEYXRlOwogICAgICAgICAgfQogIAkKICAJICBmdW5jdGlvbiBpbml0KCkgewoJICAgIAkgICAgICAgCSAgICAgICAgIAkgICAgICAgICAgICAgICAJICAgICAgIAkgICAgICAgICAJICAgICAgICAgICAgICAgCSAgICAgICAJICAgICAgICAgCSAgICAgICAgICAgICAgIAkgICAgICAgCSAgICAgICAgIAkgICAgICAgICAgICAgICAJICAgICAgIAkgICAgICAgICAJICAgICAgICAgICAgICAgCSAgICAgICAJICAgICAgICAgCSAgICAgICAgICAgICAgIAkgICAgICAgCSAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICB9CiAgICA8L3NjcmlwdD48L2hlYWQ+PGJvZHkgY2xhc3M9ImNvbXBvc2l0ZSIgb25sb2FkPSJpbml0KCk7Ij48ZGl2IGlkPSJiYW5uZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iIGlkPSJvcmdhbml6YXRpb25Mb2dvIj48aW1nIGFsdD0iQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIHNyYz0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ltYWdlcy9hc2YtbG9nby5naWYiPjwvaW1nPjwvYT48YSBocmVmPSJodHRwOi8vd3MuYXBhY2hlLm9yZy9zYW5kZXNoYTIvYyIgaWQ9InByb2plY3RMb2dvIj48aW1nIGFsdD0iQXBhY2hlIFNhbmRlc2hhMi9DIiBzcmM9Imh0dHA6Ly93cy5hcGFjaGUub3JnL3NhbmRlc2hhMi9jL2ltYWdlcy9zYW5kZXNoYTJjX2xvZ28uanBnIj48L2ltZz48L2E+PGRpdiBjbGFzcz0iY2xlYXIiPjxocj48L2hyPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImJyZWFkY3J1bWJzIj48ZGl2IGNsYXNzPSJ4bGVmdCI+CiAgICAgICAgICAgICAgICAJTGFzdCBwdWJsaXNoZWQ6IDA1IE9jdG9iZXIgMjAwNwogICAgICAgICAgICAgICAgICB8IERvYyBmb3IgMC45MTwvZGl2PjxkaXYgY2xhc3M9InhyaWdodCI+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPjxocj48L2hyPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImxlZnRDb2x1bW4iPjxkaXYgaWQ9Im5hdmNvbHVtbiI+PGRpdiBpZD0ibWVudUFwYWNoZV9TYW5kZXNoYTJfQyI+PGg1PkFwYWNoZSBTYW5kZXNoYTIvQzwvaDU+PHVsPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iaW5kZXguaHRtbCI+QXBhY2hlIFNhbmRlc2hhMi9DIEhvbWU8L2E+PC9saT48bGkgY2xhc3M9ImV4cGFuZGVkIj48YSBocmVmPSJkb3dubG9hZC5jZ2kiPkRvd25sb2FkIFNhbmRlc2hhMi9DPC9hPjx1bD48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9ImRvd25sb2FkLmNnaSI+UmVsZWFzZXM8L2E+PC9saT48L3VsPjwvbGk+PGxpIGNsYXNzPSJleHBhbmRlZCI+PGEgaHJlZj0iZG9jcy9pbmRleC5odG1sIj5Eb2N1bWVudGF0aW9uPC9hPjx1bD48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9ImRvY3MvaW5zdGFsbGF0aW9uZ3VpZGUuaHRtbCI+SW5zdGFsbGF0aW9uIEd1aWRlPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJkb2NzL3NhbmRlc2hhMmNfbWFudWFsLmh0bWwiPlNhbmRlc2hhMi9DIG1hbnVhbDwvYT48L2xpPjwvdWw+PC9saT48bGkgY2xhc3M9ImV4cGFuZGVkIj48YSBocmVmPSJsaXN0c19pc3N1ZXMuaHRtbCI+R2V0IEludm9sdmVkPC9hPjx1bD48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9Imxpc3RzX2lzc3Vlcy5odG1sIj5NYWlsaW5nIExpc3RzICZhbXA7IElzc3VlIFRyYWNraW5nPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJzdm4uaHRtbCI+Q2hlY2tvdXQgU291cmNlIENvZGU8L2E+PC9saT48L3VsPjwvbGk+PGxpIGNsYXNzPSJleHBhbmRlZCI+PGEgaHJlZj0iY29kaW5nX2NvbnZlbnRpb25zLmh0bWwiPkRldmVsb3BlciBHdWlkZWxpbmVzPC9hPjx1bD48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9ImNvZGluZ19jb252ZW50aW9ucy5odG1sIj5Db2RpbmcgQ29udmVudGlvbjwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0idmVyc2lvbmluZy5odG1sIj5WZXJzaW9ubmluZzwvYT48L2xpPjwvdWw+PC9saT48bGkgY2xhc3M9ImV4cGFuZGVkIj48YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCI+UHJvamVjdCBJbmZvcm1hdGlvbjwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCI+UHJvamVjdCBUZWFtPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2F4aXMvYXhpczIvYy9zYW5kZXNoYS90cnVuay8iIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5Tb3VyY2UgQ29kZTwvYT48L2xpPjwvdWw+PC9saT48L3VsPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBpZD0icG93ZXJlZEJ5Ij48aW1nIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tYnV0dG9uLTEucG5nIj48L2ltZz48L2E+PC9kaXY+PC9kaXY+PGRpdiBpZD0iYm9keUNvbHVtbiI+PGRpdiBjbGFzcz0iY29udGVudEJveCI+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGEgbmFtZT0iVGhlX1RlYW0iPjwvYT48aDI+VGhlIFRlYW08L2gyPjxwPgogICAgICAgIEEgc3VjY2Vzc2Z1bCBwcm9qZWN0IHJlcXVpcmVzIG1hbnkgcGVvcGxlIHRvIHBsYXkgbWFueSByb2xlcy4KICAgICAgICBTb21lIG1lbWJlcnMgd3JpdGUgY29kZSBvciBkb2N1bWVudGF0aW9uLCB3aGlsZSBvdGhlcnMgYXJlCiAgICAgICAgdmFsdWFibGUgYXMgdGVzdGVycywgc3VibWl0dGluZyBwYXRjaGVzIGFuZCBzdWdnZXN0aW9ucy4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSB0ZWFtIGlzIGNvbXByaXNlZCBvZiA8YSBocmVmPSIjTWVtYmVycyI+TWVtYmVyczwvYT4KICAgICAgICBhbmQgPGEgaHJlZj0iI0NvbnRyaWJ1dG9ycyI+Q29udHJpYnV0b3JzPC9hPi4gIE1lbWJlcnMgCiAgICAgICAgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBzb3VyY2Ugb2YgYSBwcm9qZWN0IGFuZCBhY3RpdmVseQogICAgICAgIGV2b2x2ZSB0aGUgY29kZS1iYXNlLiAgQ29udHJpYnV0b3JzIGltcHJvdmUgdGhlIHByb2plY3QKICAgICAgICB0aHJvdWdoIHN1Ym1pc3Npb24gb2YgcGF0Y2hlcyBhbmQgc3VnZ2VzdGlvbnMgdG8gdGhlIE1lbWJlcnMuCiAgICAgICAgVGhlIG51bWJlciBvZiBDb250cmlidXRvcnMgdG8gdGhlIHByb2plY3QgaXMgdW5ib3VuZGVkLgogICAgICAgIEdldCBpbnZvbHZlZCB0b2RheS4gIEFsbCBjb250cmlidXRpb25zIHRvIHRoZSBwcm9qZWN0IGFyZQogICAgICAgIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCiAgICAgIDwvcD48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJNZW1iZXJzIj48L2E+PGgzPk1lbWJlcnM8L2gzPjxwPgogICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGRldmVsb3BlcnMgd2l0aCBjb21taXQgcHJpdmlsZWdlcyB0aGF0IGhhdmUgCiAgICAgICAgZGlyZWN0bHkgY29udHJpYnV0ZWQgdG8gdGhlIHByb2plY3QgaW4gb25lIHdheSBvciBhbm90aGVyLiAgCiAgICAgIDwvcD48dGFibGUgY2xhc3M9ImJvZHlUYWJsZSI+PHRoZWFkPgogICAgICAgIDx0ciBjbGFzcz0iYiI+PHRoPk5hbWU8L3RoPjx0aD5JZDwvdGg+PHRoPkVtYWlsPC90aD48dGg+T3JnYW5pemF0aW9uPC90aD48dGg+Um9sZXM8L3RoPjx0aD5UWiBPZmZzZXQ8L3RoPjx0aD5UaW1lPC90aD48L3RyPgogICAgICAgIDwvdGhlYWQ+PHRib2R5PgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJhIj48dGQ+U2FtaXNhIEFiZXlzaW5naGU8L3RkPjx0ZD48YSBuYW1lPSJzYW1pc2EiPjwvYT5zYW1pc2E8L3RkPjx0ZD48YSBocmVmPSJtYWlsdG86c2FtaXNhIEFUIHdzbzIuY29tIj5zYW1pc2EgQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+V1NPMjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPjwvdGQ+PHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItc2FtaXNhIj5Vbmtub3duPC9zcGFuPjwvdGQ+PC90cj4KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iYiI+PHRkPkR1c2hzaGFudGhhIENoYW5kcmFkYXNhPC90ZD48dGQ+PGEgbmFtZT0iZHVzaHNoYW50aGEiPjwvYT5kdXNoc2hhbnRoYTwvdGQ+PHRkPjxhIGhyZWY9Im1haWx0bzpkdXNoc2hhbnRoYSBBVCB3c28yLmNvbSI+ZHVzaHNoYW50aGEgQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+V1NPMjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPjwvdGQ+PHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItZHVzaHNoYW50aGEiPlVua25vd248L3NwYW4+PC90ZD48L3RyPgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJhIj48dGQ+U2FoYW4gR2FtYWdlPC90ZD48dGQ+PGEgbmFtZT0ic2FoYW4iPjwvYT5zYWhhbjwvdGQ+PHRkPjxhIGhyZWY9Im1haWx0bzpzYWhhbnMgQVQgZ21haWwuY29tIj5zYWhhbnMgQVQgZ21haWwuY29tPC9hPjwvdGQ+PHRkPlB1cmR1ZSBVbml2ZXJzaXR5PC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48dGQ+PC90ZD48dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci1zYWhhbiI+VW5rbm93bjwvc3Bhbj48L3RkPjwvdHI+CiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9ImIiPjx0ZD5EYW1pdGhhIEt1bWFyYWdlPC90ZD48dGQ+PGEgbmFtZT0iZGFtaXRoYSI+PC9hPmRhbWl0aGE8L3RkPjx0ZD48YSBocmVmPSJtYWlsdG86ZGFtaXRoYSBBVCB3c28yLmNvbSI+ZGFtaXRoYSBBVCB3c28yLmNvbTwvYT48L3RkPjx0ZD5XU08yPC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48dGQ+PC90ZD48dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci1kYW1pdGhhIj5Vbmtub3duPC9zcGFuPjwvdGQ+PC90cj4KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iYSI+PHRkPk5hbmRpa2EgSmF5YXdhcmRhbmE8L3RkPjx0ZD48YSBuYW1lPSJuYW5kaWthIj48L2E+bmFuZGlrYTwvdGQ+PHRkPjxhIGhyZWY9Im1haWx0bzpuYW5kaWthIEFUIHdzbzIuY29tIj5uYW5kaWthIEFUIHdzbzIuY29tPC9hPjwvdGQ+PHRkPldTTzI8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD48L3RkPjx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLW5hbmRpa2EiPlVua25vd248L3NwYW4+PC90ZD48L3RyPgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJiIj48dGQ+TWFuanVsYSBQZWlyaXM8L3RkPjx0ZD48YSBuYW1lPSJtYW5qdWxhIj48L2E+bWFuanVsYTwvdGQ+PHRkPjxhIGhyZWY9Im1haWx0bzptYW5qdWxhIEFUIHdzbzIuY29tIj5tYW5qdWxhIEFUIHdzbzIuY29tPC9hPjwvdGQ+PHRkPldTTzI8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD48L3RkPjx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLW1hbmp1bGEiPlVua25vd248L3NwYW4+PC90ZD48L3RyPgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJhIj48dGQ+U2FuamF5YSBSYXRobmF3ZWVyYTwvdGQ+PHRkPjxhIG5hbWU9InBpbmkiPjwvYT5waW5pPC90ZD48dGQ+PGEgaHJlZj0ibWFpbHRvOnNhbmpheWEgQVQgd3NvMi5jb20iPnNhbmpheWEgQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+V1NPMjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPjwvdGQ+PHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItcGluaSI+VW5rbm93bjwvc3Bhbj48L3RkPjwvdHI+CiAgICAgICAgICAgICAgICA8L3Rib2R5PjwvdGFibGU+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iQ29udHJpYnV0b3JzIj48L2E+PGgzPkNvbnRyaWJ1dG9yczwvaDM+PHA+CiAgICAgICAgVGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoaXMgcHJvamVjdAogICAgICAgIHRocm91Z2ggdGhlIHdheSBvZiBzdWdnZXN0aW9ucywgcGF0Y2hlcyBvciBkb2N1bWVudGF0aW9uLgogICAgICA8L3A+PHRhYmxlIGNsYXNzPSJib2R5VGFibGUiPjx0aGVhZD4KICAgICAgICA8dHIgY2xhc3M9ImIiPjx0aD5OYW1lPC90aD48dGg+RW1haWw8L3RoPjx0aD5Pcmdhbml6YXRpb248L3RoPjx0aD5Sb2xlczwvdGg+PC90cj4KICAgICAgICA8L3RoZWFkPjx0Ym9keT4KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iYSI+PHRkPlBhdWwgRnJlbWFudGxlPC90ZD48dGQ+PGEgaHJlZj0ibWFpbHRvOnB6ZnJlbyBBVCBnbWFpbC5jb20iPnB6ZnJlbyBBVCBnbWFpbC5jb208L2E+PC90ZD48dGQ+PC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgICAgVGVjaG5pY2FsIEFkdmlzZXI8YnI+PC9icj4KICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CiAgICAgICAgICAgICAgICA8L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPjxocj48L2hyPjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+PGRpdiBjbGFzcz0ieHJpZ2h0Ij6pIDIwMDUtMjAwNywgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+PGhyPjwvaHI+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4K