a:3:{s:4:"name";s:14:"pointimagewiki";s:4:"dirs";a:7:{i:0;s:14:"pointimagewiki";i:1;s:22:"pointimagewiki/actions";i:2;s:18:"pointimagewiki/bib";i:3;s:24:"pointimagewiki/bib/domtt";i:4;s:26:"pointimagewiki/bib/tooltip";i:5;s:20:"pointimagewiki/bib/x";i:6;s:20:"pointimagewiki/CACHE";}s:5:"files";a:10:{s:23:"pointimagewiki/.project";s:516:"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHByb2plY3REZXNjcmlwdGlvbj4KCTxuYW1lPnBvaW50aW1hZ2V3aWtpPC9uYW1lPgoJPGNvbW1lbnQ+PC9jb21tZW50PgoJPHByb2plY3RzPgoJPC9wcm9qZWN0cz4KCTxidWlsZFNwZWM+CgkJPGJ1aWxkQ29tbWFuZD4KCQkJPG5hbWU+bmV0LnNvdXJjZWZvcmdlLnBocGVjbGlwc2UucGFyc2VyYnVpbGRlcjwvbmFtZT4KCQkJPGFyZ3VtZW50cz4KCQkJPC9hcmd1bWVudHM+CgkJPC9idWlsZENvbW1hbmQ+Cgk8L2J1aWxkU3BlYz4KCTxuYXR1cmVzPgoJCTxuYXR1cmU+bmV0LnNvdXJjZWZvcmdlLnBocGVjbGlwc2UucGhwbmF0dXJlPC9uYXR1cmU+Cgk8L25hdHVyZXM+CjwvcHJvamVjdERlc2NyaXB0aW9uPgo=";s:37:"pointimagewiki/actions/pointimage.php";s:12700:"PD9waHAKLyoKcG9pbnRpbWFnZS5waHAKCjIwMDYgTGF1cmVudCBNYXJzZWF1bHQgKGlkZWEpICYgRGF2aWQgRGVsb24gKGNvZGUpIAoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCgoqLwoKLy8gVE9ETyA6IHV0aWxpc2VyIGxlIG1lbWUganMgcG91ciBsZXMgZm9ybXVsYWlyZXMgcXVlIHBvdXIgbGVzIHRvb2x0aXAgKHN1cHByaW1lciB3el90b29sdGlwIC4uLi4pIAovLyBUT0RPIDogcmVnbGVyIGxlIHBiIGRlIGNhY2hlIGRlcyBpbWFnZXMgOiBpbCBmYXV0IGVmZmFjZXIgLi4uCgoKaWYgKChpc3NldCgkX0dFVFsnaW1hZ2VfeCddKSB8fCBpc3NldCgkX0dFVFsnaW1hZ2VfeSddKSApKSB7CgogIGlmICgkX1BPU1RbJ3N1Ym1pdCddPT0nU2F1dmVyJykgewogIAkKICAJJHNwYW09MDsKICAJcHJlZ19tYXRjaF9hbGwoIi9bYS16XSs6XC9cL1xTKy8iLCRfUE9TVFsnaW1hZ2VfdGV4dGUnXSwkbWF0Y2hlcyk7CglpZiAoY291bnQoJG1hdGNoZXMgWzBdKT4xKSB7CgkJJHNwYW09MTsKCX0KCXByZWdfbWF0Y2hfYWxsKCIvW2Etel0rOlwvXC9cUysvIiwkX1BPU1RbJ2NvdWxldXJfeHknXSwkbWF0Y2hlcyk7CglpZiAoY291bnQoJG1hdGNoZXMgWzBdKT4xKSB7CgkJJHNwYW09MTsKCX0KCQogIAlpZiAoISRzcGFtKSB7CgkgIAkkY2hhaW5lPSJcbn5+XCJcIjwhLS0iLiRfR0VUWydpbWFnZV94J10uIi0iLiRfR0VUWydpbWFnZV95J10uIi0tPlwiXCJbIi4kX1BPU1RbJ2ltYWdlX3RleHRlJ10uIl1+fiI7CgkgIAlpZiAoJF9QT1NUWydjb3VsZXVyX3h5J10pIHsKCQkgIAkkY2hhaW5lPSJcbn5+XCJcIjwhLS0iLiRfR0VUWydpbWFnZV94J10uIi0iLiRfR0VUWydpbWFnZV95J10uIi0iLiRfUE9TVFsnY291bGV1cl94eSddLiItLT5cIlwiWyIuJF9QT1NUWydpbWFnZV90ZXh0ZSddLiJdfn4iOwoJCQlwcmVnX21hdGNoKCcvKFswLTldWzAtOV0qKS0oWzAtOV1bMC05XSopLSooW2EtekEtWl0qKS8nLCRsb2NhdGlvbiwkZWxlbWVudHMpOwoJICAJfQoJCSRkb25uZWVzYm9keSA9ICR0aGlzLT5Mb2FkU2luZ2xlKCJzZWxlY3QgKiBmcm9tICIuJHRoaXMtPmNvbmZpZ1sidGFibGVfcHJlZml4Il0uInBhZ2VzIHdoZXJlIHRhZyA9ICciLm15c3FsX2VzY2FwZV9zdHJpbmcoJHRoaXMtPkdldFBhZ2VUYWcoKS4nUG9pbnRJbWFnZURvbm5lZXMnKS4iJ2FuZCBsYXRlc3QgPSAnWScgbGltaXQgMSIpOwoJICAJJHRoaXMtPlNhdmVQYWdlKCR0aGlzLT5HZXRQYWdlVGFnKCkuJ1BvaW50SW1hZ2VEb25uZWVzJywkZG9ubmVlc2JvZHlbJ2JvZHknXS4kY2hhaW5lKTsKICAJCSR0aGlzLT5SZWRpcmVjdCgkdGhpcy0+SHJlZigpKTsKICAJfQogIH0KICBlbHNlIHsKICAJJHRoaXMtPlJlZGlyZWN0KCR0aGlzLT5IcmVmKCkpOwogIH0KfQoKCi8vIExlY3R1cmUgUGFyYW1ldHJlcyBkZSBsJ2FjdGlvbiA6CgovLyBub20gZGUgbGEgY2FydGUKCiRzcmNfbWFwID0gJHRoaXMtPkdldFBhcmFtZXRlcignc3JjbWFwJyk7CmlmICghJHNyY19tYXApIHsKCWVjaG8gJHRoaXMtPkZvcm1hdCgnLy9QYXJhbWV0cmUgc3JjbWFwIGFic2VudC8vJyk7CglleGl0Owp9CgppZiAoIWZpbGVfZXhpc3RzKCdpbWFnZXMvJy4kc3JjX21hcCkpIHsKCWVjaG8gJHRoaXMtPkZvcm1hdCgnLy9JbWFnZSBub24gdHJvdXbpZS8vJyk7Cn0KCQovLyBDb3VsZXVyIHBhciBkZWZhdXQgOiB2ZXJ0CgovLyBUZXN0IHZhbGV1cnMgZGUgcGFyYW1ldHJlcyBoaXN0b3JpcXVlIHBvdXIgY29tcGF0aWJpbGl06SBhc2NlbmRhbnRlCiRjb3VsZXVyID0gJHRoaXMtPkdldFBhcmFtZXRlcignY29sb3InKTsKaWYgKCEkY291bGV1cikgewoJJGNvdWxldXIgPSAkdGhpcy0+R2V0UGFyYW1ldGVyKCdwb2ludGNvbG9yJyk7Cn0KCi8vIFRhaWxsZSBwb2ludCBwYXIgZOlmYXV0IDogMTAKCiRwb2ludF9zaXplPSR0aGlzLT5HZXRQYXJhbWV0ZXIoJ3BvaW50c2l6ZScpOwppZiAoISRwb2ludF9zaXplKSB7CgkkcG9pbnRfc2l6ZT0xMDsKfQoKCi8vIEZpbiBsZWN0dXJlIFBhcmFtZXRyZSBkZSBsJ2FjdGlvbgoKCi8vIE5vbSBkdSBmaWNoaWVyIGltYWdlIGVuIHNvcnRpZQoKCiRkZXN0X21hcCA9ICR0aGlzLT5nZXRQYWdlVGFnKCkudGltZSgpLiR0aGlzLT5nZXRQYWdlVGFnKCkuJy5qcGcnOwoKCgokaW1nID0gaW1hZ2VjcmVhdGVmcm9tanBlZygnaW1hZ2VzLycuJHNyY19tYXApOwoKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwcmVwYXJlX2ZpbGwiKSkgewoJCglmdW5jdGlvbiBwcmVwYXJlX2ZpbGwoJGNvdWxldXIsJGltZykgewoJCgkJc3dpdGNoICgkY291bGV1cikgewoJCQljYXNlICdncmVlbic6CgkJCSAgICRmaWxsID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRpbWcsIDAsIDI1NSwgMCk7CgkJCSAgIGJyZWFrOwoJCQljYXNlICdyZWQnOgoJCQkgICAkZmlsbCA9IGltYWdlY29sb3JhbGxvY2F0ZSgkaW1nLCAyNTUsIDAsIDApOwoJCQkgICBicmVhazsKCQkJY2FzZSAnYmx1ZSc6CgkJCSAgICRmaWxsID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRpbWcsIDAsIDAsIDI1NSk7CgkJCSAgIGJyZWFrOwoJCQljYXNlICdibGFjayc6CgkJCSAgICRmaWxsID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRpbWcsIDAsIDAsIDApOwoJCQkgICBicmVhazsKCQkJZGVmYXVsdDoKCQkJICAgJGZpbGwgPSBpbWFnZWNvbG9yYWxsb2NhdGUoJGltZywgMCwgMjU1LCAwKTsKCQl9CgkJcmV0dXJuICRmaWxsOwoJfQp9CgokZmlsbF9wYXJhbT1wcmVwYXJlX2ZpbGwoJGNvdWxldXIsJGltZyk7CgplY2hvICI8YSBuYW1lPVwidG9wbWFwXCI+PC9hPiI7CgoKJGRvbm5lZXNib2R5ID0gJHRoaXMtPkxvYWRTaW5nbGUoInNlbGVjdCAqIGZyb20gIi4kdGhpcy0+Y29uZmlnWyJ0YWJsZV9wcmVmaXgiXS4icGFnZXMgd2hlcmUgdGFnID0gJyIubXlzcWxfZXNjYXBlX3N0cmluZygkdGhpcy0+R2V0UGFnZVRhZygpLidQb2ludEltYWdlRG9ubmVlcycpLiInYW5kIGxhdGVzdCA9ICdZJyBsaW1pdCAxIik7CgogCi8vIFJlY2hlcmNoZSBQb2ludHMKIAlwcmVnX21hdGNoX2FsbCgnL35+KC4qKX5+L21zVScsJGRvbm5lZXNib2R5Wydib2R5J10sJGxvY2F0aW9ucyk7CgkkaT0wOwoJZm9yZWFjaCAoJGxvY2F0aW9uc1sxXSBhcyAkbG9jYXRpb24pewoJCS8vIGV4dHJhY3Rpb24gY29tbWVudGFpcmUsIHNpIHByZXNlbnQKCQlwcmVnX21hdGNoKCcvXFsoLiopXF0vbXNVJywkbG9jYXRpb24sJGNvbW1lbnRzKTsKCQkkY29tbWVudD0kY29tbWVudHNbMV07CgkJaWYgKCRjb21tZW50KSB7CgkJCS8vIE9uIGVubGV2ZSBsZSBjb21tZW50YWlyZSwgYydlc3QgcGx1cyBzaW1wbGUgcG91ciBsYSBzdWl0ZSAoYydlc3QgYm9mIGhlaW4pCgkJCSRsb2NhdGlvbj1wcmVnX3JlcGxhY2UoJy9cWyguKilcXS9tc1UnLCAnJywgJGxvY2F0aW9uKTsKCQl9CgkJLy8gWCwgWSArIGNvdWxldXIgZW4gcGFyYW1ldHJlCgkJcHJlZ19tYXRjaCgnLyhbMC05XVswLTldKiktKFswLTldWzAtOV0qKS0qKFthLXpBLVpdKikvJywkbG9jYXRpb24sJGVsZW1lbnRzKTsKCQkKCQlpZiAoJGVsZW1lbnRzWzFdKSB7CgkJCSRwb3NpdGlvblsneF9pbWFnZSddICAgPSAkZWxlbWVudHNbMV07CgkJCSRwb3NpdGlvblsneV9pbWFnZSddICAgPSAkZWxlbWVudHNbMl07CgkJCSRwb3NpdGlvblsnY29sb3JfeF95J10gPSAkZWxlbWVudHNbM107CgkJfQoKCQlpZiAoJHBvc2l0aW9uKSB7CgoKCQkJJHg9JHBvc2l0aW9uWyd4X2ltYWdlJ107CgkJCSR5PSRwb3NpdGlvblsneV9pbWFnZSddOwoJCQlpZiAoJHBvc2l0aW9uWydjb2xvcl94X3knXSkgewoJCQkJJGNvbG9yX3hfeT0kcG9zaXRpb25bJ2NvbG9yX3hfeSddOwoJCQl9CgkJCWVsc2UgewoJCQkJJGNvbG9yX3hfeT0kY291bGV1cjsKCQkJfQoJCQkKCQkJJHg9cm91bmQoJHgpOwoJCQkkeT1yb3VuZCgkeSk7CgoJCQkvLyBDb21tZW50YWlyZSBkZWphIHBy6XNlbnQgPyA6IG9uIGFqb3V0ZSDgIGxhIHN1aXRlCgkJCWlmICgkdGV4dFskeC4nfCcuJHkuJ3wnLiRjb2xvcl94X3ldKSB7CgkJCQkkY29tbWVudD0kdGV4dFskeC4nfCcuJHkuJ3wnLiRjb2xvcl94X3ldPSR0ZXh0WyR4Lid8Jy4keS4nfCcuJGNvbG9yX3hfeV0uJzxicj4nLiRjb21tZW50OwoJCQl9CgkJCS8vIE5vdXZlYXUgY29tbWVudGFpcmUKCQkJZWxzZSB7CgkJCQkkdGV4dFskeC4nfCcuJHkuJ3wnLiRjb2xvcl94X3ldPSRjb21tZW50OwoJCQl9CgoJCX0KCQkkaSsrOwoJfQoKLy8gUHJlcGFyYXRpb24gaW1hZ2UgbWFwIAogCQoJCSR1c2VtYXA9Jyc7CgkJCgkJaWYgKGlzc2V0KCR0ZXh0KSkgewoJCQkKCQkJZm9yZWFjaCAoJHRleHQgYXMgJGNvb3JkID0+ICRtYXB0ZXh0ICkgewoJCQkJbGlzdCgkeCwkeSwkY29sb3JfeF95KT1leHBsb2RlKCd8JywkY29vcmQpOwoJCQkJCgkJCQlpZiAoIWlzc2V0ICgkY29sb3JfeF95KSB8fCAoJGNvbG9yX3hfeSA9PSAkY291bGV1cikpIHsKCQkJCQkkZmlsbD0kZmlsbF9wYXJhbTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCSRmaWxsPXByZXBhcmVfZmlsbCgkY29sb3JfeF95LCRpbWcpOwoJCQkJfQoJCQkJaW1hZ2VmaWxsZWRlbGxpcHNlKCRpbWcsICR4LCAkeSwgJHBvaW50X3NpemUsICRwb2ludF9zaXplLCAkZmlsbCk7CgkJCQkvLyBwYXMgZGUgZG91YmxlIHF1b3RlIGRhbnMgbGUgdGV4dGUKCQkJCSRtYXB0ZXh0PSR0aGlzLT5Gb3JtYXQoJG1hcHRleHQpOwoJCQkJLy8gcGFzIGRlIGRvdWJsZSBxdW90ZSBkYW5zIGxlIHRleHRlCgkJCQkkbWFwdGV4dD1wcmVnX3JlcGxhY2UoIi8nLyIsICJcJyIsICRtYXB0ZXh0KTsKCQkJCSRtYXB0ZXh0PXByZWdfcmVwbGFjZSgiL1wiLyIsICJcJyIsICRtYXB0ZXh0KTsKCQkJCSRtYXB0ZXh0PXByZWdfcmVwbGFjZSgiL1xuLyIsICIiLCAkbWFwdGV4dCk7CgkJCQkkbWFwdGV4dD1zdHJfcmVwbGFjZSgiXHIiLCAiIiwgJG1hcHRleHQpOwoJCQkJJHVzZW1hcD0kdXNlbWFwLiI8YXJlYSBzaGFwZT1cImNpcmNsZVwiIGFsdD1cIlwiIGNvb3Jkcz1cIiIuJHguIiwiLiR5LiIsNVwiIG9ubW91c2VvdmVyPVwidGhpcy5UX0JHQ09MT1I9JyNFNkZGRkInO3RoaXMuVF9PRkZTRVRYPTI7dGhpcy5UX09GRlNFVFk9Mjt0aGlzLlRfU1RJQ0tZPTE7cmV0dXJuIGVzY2FwZSgnIi4kbWFwdGV4dC4iJylcIiBocmVmPVwiI1wiLz4iOwoJCQoJCQl9CgkJfQoJCQoJCT8+CgkJCgkJIDxmb3JtIGlkPSdmb3JtX3h5JyBvbnN1Ym1pdD0ncmV0dXJuIGZhbHNlJz4gICAKCQkgIAoJCTw/cGhwCgkJCgkJZWNobyAiPGRpdiBpZCA9XCJwb2ludGltYWdld2lraW1hcFwiIHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7XCI+IjsKCQllY2hvICI8aW1nIHNyYz1cIiIuKCd0b29scy9wb2ludGltYWdld2lraS9DQUNIRS8nLiRkZXN0X21hcCkuIlwiIHN0eWxlPVwiYm9yZGVyOm5vbmU7IGN1cnNvcjpjcm9zc2hhaXJcIiBhbHQ9XCJcIiB1c2VtYXA9XCIjdGhlbWFwXCI+PC9pbWc+PGJyIC8+XG4iOwoJCWVjaG8gIjxtYXAgbmFtZT1cInRoZW1hcFwiIGlkPVwidGhlbWFwXCI+IjsKCQllY2hvICR1c2VtYXA7CgkJZWNobyAiPC9tYXA+IjsKCQllY2hvICI8L2Rpdj4iOwoJCQkJCgk/PgoJCQk8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ndHh0JyBpZD0neCc+CgkJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSd0eHQnIGlkPSd5Jz4KCQkJPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J3R4dCcgaWQ9J3hfaW1hZ2UnPgoJCQk8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ndHh0JyBpZD0neV9pbWFnZSc+CgoJPC9mb3JtPgoJCgk8P3BocAoJCQoJCWVjaG8gIjxicj4iOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkJZWNobyAiPGEgaHJlZj1cIiIuJHRoaXMtPkhyZWYoKS4iUG9pbnRJbWFnZURvbm5lZXNcIj4qPC9hPiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkJCgkJZWNobyAiPHNjcmlwdCBsYW5ndWFnZT1cIkphdmFTY3JpcHRcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwidG9vbHMvcG9pbnRpbWFnZXdpa2kvYmliL3Rvb2x0aXAvd3pfdG9vbHRpcC5qc1wiPjwvc2NyaXB0PiI7CgkJZWNobyAiPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwidG9vbHMvcG9pbnRpbWFnZXdpa2kvYmliL3gveF9jb3JlLmpzXCI+PC9zY3JpcHQ+IjsKCQllY2hvICI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCJ0b29scy9wb2ludGltYWdld2lraS9iaWIveC94X2V2ZW50LmpzXCI+PC9zY3JpcHQ+IjsKCQllY2hvICI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCJ0b29scy9wb2ludGltYWdld2lraS9iaWIvZG9tdHQvZG9tTGliLmpzXCI+PC9zY3JpcHQ+IjsKCQllY2hvICI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCJ0b29scy9wb2ludGltYWdld2lraS9iaWIvZG9tdHQvZG9tVFQuanNcIj48L3NjcmlwdD4iOwoJCQoJCQkJCQkKCgk/PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCnsKCiAgIGlmICh3aW5kb3cud2luT25Mb2FkKSB3aW5kb3cud2luT25Mb2FkKCk7Cgp9Cgp3aW5kb3cub251bmxvYWQgPSBmdW5jdGlvbigpCnsKICAgIGlmICh3aW5kb3cud2luT25VbmxvYWQpIHdpbmRvdy53aW5PblVubG9hZCgpOwp9CgoKZnVuY3Rpb24gd2luT25Mb2FkKCkKewogIHhBZGRFdmVudExpc3RlbmVyKCdwb2ludGltYWdld2lraW1hcCcsICdtb3VzZW1vdmUnLCBvbk1vdXNlbW92ZSwgZmFsc2UpOwogIHhBZGRFdmVudExpc3RlbmVyKCdwb2ludGltYWdld2lraW1hcCcsICdjbGljaycsIG9uTW91c2VjbGljaywgZmFsc2UpOwogIAp9CmZ1bmN0aW9uIG9uTW91c2Vtb3ZlKGV2dCkKewogIHZhciBlID0gbmV3IHhFdmVudChldnQpOwogIHZhciBmZSA9IHhHZXRFbGVtZW50QnlJZCgnZm9ybV94eScpLmVsZW1lbnRzOwogIDw/cGhwCiAgCQllY2hvICJ4X2ltYWdlID0gZS5vZmZzZXRYOyAiOwogICAJCWVjaG8gInlfaW1hZ2UgPWUub2Zmc2V0WTsgIjsKICA/PgogIGZlWyd4J10udmFsdWUgPSBlLm9mZnNldFg7CiAgZmVbJ3hfaW1hZ2UnXS52YWx1ZSA9IE1hdGgucm91bmQoeF9pbWFnZSk7CiAgZmVbJ3knXS52YWx1ZSA9IGUub2Zmc2V0WTsKICBmZVsneV9pbWFnZSddLnZhbHVlID0gTWF0aC5yb3VuZCh5X2ltYWdlKTsKICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gb25Nb3VzZWNsaWNrKGV2dCkKewogIHZhciBlID0gbmV3IHhFdmVudChldnQpOwogIHZhciBmZSA9IHhHZXRFbGVtZW50QnlJZCgnZm9ybV94eScpLmVsZW1lbnRzOwogIDw/cGhwCiAgCQllY2hvICJ4X2ltYWdlID0gZS5vZmZzZXRYOyAiOwogICAJCWVjaG8gInlfaW1hZ2UgPWUub2Zmc2V0WTsgIjsKICA/PgogIGZlWyd4J10udmFsdWUgPSBlLm9mZnNldFg7CiAgeF9pbWFnZT1NYXRoLnJvdW5kKHhfaW1hZ2UpOwogIGZlWyd4X2ltYWdlJ10udmFsdWUgPSB4X2ltYWdlOwogIGZlWyd5J10udmFsdWUgPSBlLm9mZnNldFk7CiAgeV9pbWFnZT1NYXRoLnJvdW5kKHlfaW1hZ2UpOwogIGZlWyd5X2ltYWdlJ10udmFsdWUgPSB5X2ltYWdlOwogIDw/cGhwCgllY2hvICJkb21UVF9hY3RpdmF0ZSh0aGlzLCBldnQsICdjb250ZW50JywgJzxmb3JtIG1ldGhvZD1cInBvc3RcIiBhY3Rpb249XCIiLiR0aGlzLT5ocmVmKCkuIiZpbWFnZV94PScreF9pbWFnZSsnJmltYWdlX3k9Jyt5X2ltYWdlKydcIj48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtcIj48dGFibGU+PHRyPjx0ZD5Db21tZW50YWlyZSA6PC90ZD48L3RyPjx0cj48dGQ+PHRleHRhcmVhIG5hbWU9XCJpbWFnZV90ZXh0ZVwiIGNvbHM9XCIzMFwiIHJvd3M9XCIxMFwiIHdyYXA9XCJzb2Z0XCIgICA+PC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZD48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlNhdXZlclwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cImNhbmNlbFwiIHZhbHVlPVwiQW5udWxhdGlvblwiPjwvdGQ+PC90cj48L3RhYmxlPiIgLiAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJjb3VsZXVyX3h5XCIgdmFsdWU9XCJncmVlblwiIHZhbHVlIENIRUNLRUQ+IFZlcnQgOiBHYXJyaWd1ZSA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImNvdWxldXJfeHlcIiB2YWx1ZT1cImJsdWVcIj4gQmxldSA6IEfpb2dyYXBoaWUgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY291bGV1cl94eVwiIHZhbHVlPVwicmVkXCI+IFJvdWdlIDogUXVlc3Rpb25zIiAuCgkJIjwvZm9ybT48L2Rpdj4nLCAndHlwZScsICdzdGlja3knICk7IjsKICAJCQogID8+CiAgcmV0dXJuIHRydWU7Cn0KPC9zY3JpcHQ+CgoKCjw/cGhwCgogICAgLy8gU3VwcHJlc2lvbiBpbWFnZSBlbiBjYWNoZQogICAgZm9yZWFjaChnbG9iKCd0b29scy9wb2ludGltYWdld2lraS9DQUNIRS8nLiR0aGlzLT5nZXRQYWdlVGFnKCkuJyonLiR0aGlzLT5nZXRQYWdlVGFnKCkuJy5qcGcnKSBhcyAkZm4pIHsKICAgICAgICAgIHVubGluaygkZm4pOwogICAgfQoKIAkKCWltYWdlaW50ZXJsYWNlKCRpbWcsMSk7CglpbWFnZWpwZWcoJGltZywgJ3Rvb2xzL3BvaW50aW1hZ2V3aWtpL0NBQ0hFLycuJGRlc3RfbWFwLDk1KTsKCWltYWdlZGVzdHJveSgkaW1nKTsKCgllY2hvICRtYXB2aWV3X291dHB1dDsKCgo/Pgo=";s:34:"pointimagewiki/bib/domtt/domLib.js";s:21204:"LyoqICRJZDogZG9tTGliLmpzIDE5NTIgMjAwNS0wNy0xNyAxNjoyNDowNVogZGFsbGVuICQgKi8KLy8ge3t7IGxpY2Vuc2UKCi8qCiAqIENvcHlyaWdodCAyMDAyLTIwMDUgRGFuIEFsbGVuLCBNb2phdmVsaW51eC5jb20gKGRhbi5hbGxlbkBtb2phdmVsaW51eC5jb20pCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KCi8vIH19fQovLyB7e3sgaW50cm8KCi8qKgogKiBUaXRsZTogRE9NIExpYnJhcnkgQ29yZQogKiBWZXJzaW9uOiAwLjcwCiAqCiAqIFN1bW1hcnk6CiAqIEEgc2V0IG9mIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zIHRoYXQgbWFrZSBpdCBlYXNpZXIgdG8gY3JlYXRlIGphdmFzY3JpcHQKICogYXBwbGljYXRpb25zIHRoYXQgcmVseSBvbiB0aGUgRE9NLgogKgogKiBVcGRhdGVkOiAyMDA1LzA1LzE3CiAqCiAqIE1haW50YWluZXI6IERhbiBBbGxlbiA8ZGFuLmFsbGVuQG1vamF2ZWxpbnV4LmNvbT4KICogTWFpbnRhaW5lcjogSmFzb24gUnVzdCA8anJ1c3RAcnVzdHlwYXJ0cy5jb20+CiAqCiAqIExpY2Vuc2U6IEFwYWNoZSAyLjAKICovCgovLyB9fX0KLy8ge3t7IGdsb2JhbCBjb25zdGFudHMgKERPIE5PVCBFRElUKQoKLy8gLS0gQnJvd3NlciBEZXRlY3Rpb24gLS0KdmFyIGRvbUxpYl91c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CnZhciBkb21MaWJfaXNNYWMgPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdNYWMnKSAhPSAtMTsKdmFyIGRvbUxpYl9pc1dpbiA9IGRvbUxpYl91c2VyQWdlbnQuaW5kZXhPZignd2luZG93cycpICE9IC0xOwovLyBOT1RFOiBjb3VsZCB1c2Ugd2luZG93Lm9wZXJhIGZvciBkZXRlY3RpbmcgT3BlcmEKdmFyIGRvbUxpYl9pc09wZXJhID0gZG9tTGliX3VzZXJBZ2VudC5pbmRleE9mKCdvcGVyYScpICE9IC0xOwp2YXIgZG9tTGliX2lzT3BlcmE3dXAgPSBkb21MaWJfdXNlckFnZW50Lm1hdGNoKC9vcGVyYS4oN3w4KS9pKTsKdmFyIGRvbUxpYl9pc1NhZmFyaSA9IGRvbUxpYl91c2VyQWdlbnQuaW5kZXhPZignc2FmYXJpJykgIT0gLTE7CnZhciBkb21MaWJfaXNLb25xID0gZG9tTGliX3VzZXJBZ2VudC5pbmRleE9mKCdrb25xdWVyb3InKSAhPSAtMTsKLy8gQm90aCBrb25xdWVyb3IgYW5kIHNhZmFyaSB1c2UgdGhlIGtodG1sIHJlbmRlcmluZyBlbmdpbmUKdmFyIGRvbUxpYl9pc0tIVE1MID0gKGRvbUxpYl9pc0tvbnEgfHwgZG9tTGliX2lzU2FmYXJpIHx8IGRvbUxpYl91c2VyQWdlbnQuaW5kZXhPZigna2h0bWwnKSAhPSAtMSk7CnZhciBkb21MaWJfaXNJRSA9ICghZG9tTGliX2lzS0hUTUwgJiYgIWRvbUxpYl9pc09wZXJhICYmIChkb21MaWJfdXNlckFnZW50LmluZGV4T2YoJ21zaWUgNScpICE9IC0xIHx8IGRvbUxpYl91c2VyQWdlbnQuaW5kZXhPZignbXNpZSA2JykgIT0gLTEgfHwgZG9tTGliX3VzZXJBZ2VudC5pbmRleE9mKCdtc2llIDcnKSAhPSAtMSkpOwp2YXIgZG9tTGliX2lzSUU1dXAgPSBkb21MaWJfaXNJRTsKdmFyIGRvbUxpYl9pc0lFNTAgPSAoZG9tTGliX2lzSUUgJiYgZG9tTGliX3VzZXJBZ2VudC5pbmRleE9mKCdtc2llIDUuMCcpICE9IC0xKTsKdmFyIGRvbUxpYl9pc0lFNTUgPSAoZG9tTGliX2lzSUUgJiYgZG9tTGliX3VzZXJBZ2VudC5pbmRleE9mKCdtc2llIDUuNScpICE9IC0xKTsKdmFyIGRvbUxpYl9pc0lFNSA9IChkb21MaWJfaXNJRTUwIHx8IGRvbUxpYl9pc0lFNTUpOwovLyBzYWZhcmkgYW5kIGtvbnEgbWF5IHVzZSBzdHJpbmcgImtodG1sLCBsaWtlIGdlY2tvIiwgc28gY2hlY2sgZm9yIGRlc3RpbmN0aXZlIC8KdmFyIGRvbUxpYl9pc0dlY2tvID0gZG9tTGliX3VzZXJBZ2VudC5pbmRleE9mKCdnZWNrby8nKSAhPSAtMTsKdmFyIGRvbUxpYl9pc01hY0lFID0gKGRvbUxpYl9pc0lFICYmIGRvbUxpYl9pc01hYyk7CnZhciBkb21MaWJfaXNJRTU1dXAgPSBkb21MaWJfaXNJRTV1cCAmJiAhZG9tTGliX2lzSUU1MCAmJiAhZG9tTGliX2lzTWFjSUU7CnZhciBkb21MaWJfaXNJRTZ1cCA9IGRvbUxpYl9pc0lFNTV1cCAmJiAhZG9tTGliX2lzSUU1NTsKCi8vIC0tIEJyb3dzZXIgQWJpbGl0aWVzIC0tCnZhciBkb21MaWJfc3RhbmRhcmRzTW9kZSA9IChkb2N1bWVudC5jb21wYXRNb2RlICYmIGRvY3VtZW50LmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKTsKdmFyIGRvbUxpYl91c2VMaWJyYXJ5ID0gKGRvbUxpYl9pc09wZXJhN3VwIHx8IGRvbUxpYl9pc0tIVE1MIHx8IGRvbUxpYl9pc0lFNXVwIHx8IGRvbUxpYl9pc0dlY2tvIHx8IGRvbUxpYl9pc01hY0lFIHx8IGRvY3VtZW50LmRlZmF1bHRWaWV3KTsKLy8gZml4ZWQgaW4gS29ucTMuMgp2YXIgZG9tTGliX2hhc0Jyb2tlblRpbWVvdXQgPSAoZG9tTGliX2lzTWFjSUUgfHwgKGRvbUxpYl9pc0tvbnEgJiYgZG9tTGliX3VzZXJBZ2VudC5tYXRjaCgva29ucXVlcm9yXC8zLihbMi05XSkvKSA9PSBudWxsKSk7CnZhciBkb21MaWJfY2FuRmFkZSA9IChkb21MaWJfaXNHZWNrbyB8fCBkb21MaWJfaXNJRSB8fCBkb21MaWJfaXNTYWZhcmkgfHwgZG9tTGliX2lzT3BlcmEpOwp2YXIgZG9tTGliX2NhbkRyYXdPdmVyU2VsZWN0ID0gKGRvbUxpYl9pc01hYyB8fCBkb21MaWJfaXNPcGVyYSB8fCBkb21MaWJfaXNHZWNrbyk7CnZhciBkb21MaWJfY2FuRHJhd092ZXJGbGFzaCA9IChkb21MaWJfaXNNYWMgfHwgZG9tTGliX2lzV2luKTsKCi8vIC0tIEV2ZW50IFZhcmlhYmxlcyAtLQp2YXIgZG9tTGliX2V2ZW50VGFyZ2V0ID0gZG9tTGliX2lzSUUgPyAnc3JjRWxlbWVudCcgOiAnY3VycmVudFRhcmdldCc7CnZhciBkb21MaWJfZXZlbnRCdXR0b24gPSBkb21MaWJfaXNJRSA/ICdidXR0b24nIDogJ3doaWNoJzsKdmFyIGRvbUxpYl9ldmVudFRvID0gZG9tTGliX2lzSUUgPyAndG9FbGVtZW50JyA6ICdyZWxhdGVkVGFyZ2V0JzsKdmFyIGRvbUxpYl9zdHlsZVBvaW50ZXIgPSBkb21MaWJfaXNJRSA/ICdoYW5kJyA6ICdwb2ludGVyJzsKLy8gTk9URTogYSBidWcgZXhpc3RzIGluIE9wZXJhIHRoYXQgcHJldmVudHMgbWF4V2lkdGggZnJvbSBiZWluZyBzZXQgdG8gJ25vbmUnLCBzbyB3ZSBtYWtlIGl0IGh1Z2UKdmFyIGRvbUxpYl9zdHlsZU5vTWF4V2lkdGggPSBkb21MaWJfaXNPcGVyYSA/ICcxMDAwMHB4JyA6ICdub25lJzsKdmFyIGRvbUxpYl9oaWRlUG9zaXRpb24gPSAnLTEwMDBweCc7CnZhciBkb21MaWJfc2Nyb2xsYmFyV2lkdGggPSAxNDsKdmFyIGRvbUxpYl9hdXRvSWQgPSAxOwp2YXIgZG9tTGliX3pJbmRleCA9IDEwMDsKCi8vIC0tIERldGVjdGlvbiAtLQp2YXIgZG9tTGliX2NvbGxpc2lvbkVsZW1lbnRzOwp2YXIgZG9tTGliX2NvbGxpc2lvbnNDYWNoZWQgPSBmYWxzZTsKCnZhciBkb21MaWJfdGltZW91dFN0YXRlSWQgPSAwOwp2YXIgZG9tTGliX3RpbWVvdXRTdGF0ZXMgPSBuZXcgSGFzaCgpOwoKLy8gfX19Ci8vIHt7eyBET00gZW5oYW5jZW1lbnRzCgppZiAoIWRvY3VtZW50LkVMRU1FTlRfTk9ERSkKewoJZG9jdW1lbnQuRUxFTUVOVF9OT0RFID0gMTsKCWRvY3VtZW50LkFUVFJJQlVURV9OT0RFID0gMjsKCWRvY3VtZW50LlRFWFRfTk9ERSA9IDM7Cglkb2N1bWVudC5ET0NVTUVOVF9OT0RFID0gOTsKCWRvY3VtZW50LkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMTsKfQoKZnVuY3Rpb24gZG9tTGliX2Nsb25lKG9iaikKewoJdmFyIGNvcHkgPSB7fTsKCWZvciAodmFyIGkgaW4gb2JqKQoJewoJCXZhciB2YWx1ZSA9IG9ialtpXTsKCQl0cnkKCQl7CgkJCWlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZih2YWx1ZSkgPT0gJ29iamVjdCcgJiYgdmFsdWUgIT0gd2luZG93ICYmICF2YWx1ZS5ub2RlVHlwZSkKCQkJewoJCQkJY29weVtpXSA9IGRvbUxpYl9jbG9uZSh2YWx1ZSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQljb3B5W2ldID0gdmFsdWU7CgkJCX0KCQl9CgkJY2F0Y2goZSkKCQl7CgkJCWNvcHlbaV0gPSB2YWx1ZTsKCQl9Cgl9CgoJcmV0dXJuIGNvcHk7Cn0KCi8vIH19fQovLyB7e3sgY2xhc3MgSGFzaCgpCgpmdW5jdGlvbiBIYXNoKCkKewoJdGhpcy5sZW5ndGggPSAwOwoJdGhpcy5udW1lcmljTGVuZ3RoID0gMDsgCgl0aGlzLmVsZW1lbnREYXRhID0gW107Cglmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMikKCXsKCQlpZiAodHlwZW9mKGFyZ3VtZW50c1tpICsgMV0pICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJdGhpcy5lbGVtZW50RGF0YVthcmd1bWVudHNbaV1dID0gYXJndW1lbnRzW2kgKyAxXTsKCQkJdGhpcy5sZW5ndGgrKzsKCQkJaWYgKGFyZ3VtZW50c1tpXSA9PSBwYXJzZUludChhcmd1bWVudHNbaV0pKSAKCQkJewoJCQkJdGhpcy5udW1lcmljTGVuZ3RoKys7CgkJCX0KCQl9Cgl9Cn0KCi8vIHVzaW5nIHByb3RvdHlwZSBhcyBvcHBvc2VkIHRvIGlubmVyIGZ1bmN0aW9ucyBzYXZlcyBvbiBtZW1vcnkgCkhhc2gucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGluX2tleSkKewoJcmV0dXJuIHRoaXMuZWxlbWVudERhdGFbaW5fa2V5XTsKfQoKSGFzaC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oaW5fa2V5LCBpbl92YWx1ZSkKewoJaWYgKHR5cGVvZihpbl92YWx1ZSkgIT0gJ3VuZGVmaW5lZCcpCgl7CgkJaWYgKHR5cGVvZih0aGlzLmVsZW1lbnREYXRhW2luX2tleV0pID09ICd1bmRlZmluZWQnKQoJCXsKCQkJdGhpcy5sZW5ndGgrKzsKCQkJaWYgKGluX2tleSA9PSBwYXJzZUludChpbl9rZXkpKSAKCQkJewoJCQkJdGhpcy5udW1lcmljTGVuZ3RoKys7CgkJCX0KCQl9CgoJCXJldHVybiB0aGlzLmVsZW1lbnREYXRhW2luX2tleV0gPSBpbl92YWx1ZTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCkhhc2gucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGluX2tleSkKewoJdmFyIHRtcF92YWx1ZTsKCWlmICh0eXBlb2YodGhpcy5lbGVtZW50RGF0YVtpbl9rZXldKSAhPSAndW5kZWZpbmVkJykKCXsKCQl0aGlzLmxlbmd0aC0tOwoJCWlmIChpbl9rZXkgPT0gcGFyc2VJbnQoaW5fa2V5KSkgCgkJewoJCQl0aGlzLm51bWVyaWNMZW5ndGgtLTsKCQl9CgoJCXRtcF92YWx1ZSA9IHRoaXMuZWxlbWVudERhdGFbaW5fa2V5XTsKCQlkZWxldGUgdGhpcy5lbGVtZW50RGF0YVtpbl9rZXldOwoJfQoKCXJldHVybiB0bXBfdmFsdWU7Cn0KCkhhc2gucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbigpCnsKCXJldHVybiB0aGlzLmxlbmd0aDsKfQoKSGFzaC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24oaW5fa2V5KQp7CglyZXR1cm4gdHlwZW9mKHRoaXMuZWxlbWVudERhdGFbaW5fa2V5XSkgIT0gJ3VuZGVmaW5lZCc7Cn0KCkhhc2gucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihpbl9vYmopCnsKCWZvciAodmFyIHRtcF9rZXkgaW4gdGhpcy5lbGVtZW50RGF0YSkgCgl7CgkJaWYgKHRoaXMuZWxlbWVudERhdGFbdG1wX2tleV0gPT0gaW5fb2JqKSAKCQl7CgkJCXJldHVybiB0bXBfa2V5OwoJCX0KCX0KfQoKSGFzaC5wcm90b3R5cGUubWVyZ2UgPSBmdW5jdGlvbihpbl9oYXNoKQp7Cglmb3IgKHZhciB0bXBfa2V5IGluIGluX2hhc2guZWxlbWVudERhdGEpIAoJewoJCWlmICh0eXBlb2YodGhpcy5lbGVtZW50RGF0YVt0bXBfa2V5XSkgPT0gJ3VuZGVmaW5lZCcpIAoJCXsKCQkJdGhpcy5sZW5ndGgrKzsKCQkJaWYgKHRtcF9rZXkgPT0gcGFyc2VJbnQodG1wX2tleSkpIAoJCQl7CgkJCQl0aGlzLm51bWVyaWNMZW5ndGgrKzsKCQkJfQoJCX0KCgkJdGhpcy5lbGVtZW50RGF0YVt0bXBfa2V5XSA9IGluX2hhc2guZWxlbWVudERhdGFbdG1wX2tleV07Cgl9Cn0KCkhhc2gucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbihpbl9oYXNoKQp7CglpZiAodGhpcy5sZW5ndGggIT0gaW5faGFzaC5sZW5ndGgpIAoJewoJCXJldHVybiBmYWxzZTsKCX0KCglmb3IgKHZhciB0bXBfa2V5IGluIHRoaXMuZWxlbWVudERhdGEpIAoJewoJCWlmICh0aGlzLmVsZW1lbnREYXRhW3RtcF9rZXldICE9IGluX2hhc2guZWxlbWVudERhdGFbdG1wX2tleV0pIAoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0KCQoJcmV0dXJuIHRydWU7Cn0KCi8vIH19fQovLyB7e3sgZG9tTGliX2lzRGVzY2VuZGFudE9mKCkKCmZ1bmN0aW9uIGRvbUxpYl9pc0Rlc2NlbmRhbnRPZihpbl9vYmplY3QsIGluX2FuY2VzdG9yKQp7CglpZiAoaW5fb2JqZWN0ID09IGluX2FuY2VzdG9yKQoJewoJCXJldHVybiB0cnVlOwoJfQoKCXdoaWxlIChpbl9vYmplY3QgIT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KQoJewoJCXRyeQoJCXsKCQkJaWYgKCh0bXBfb2JqZWN0ID0gaW5fb2JqZWN0Lm9mZnNldFBhcmVudCkgJiYgdG1wX29iamVjdCA9PSBpbl9hbmNlc3RvcikKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJZWxzZSBpZiAoKHRtcF9vYmplY3QgPSBpbl9vYmplY3QucGFyZW50Tm9kZSkgPT0gaW5fYW5jZXN0b3IpCgkJCXsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJaW5fb2JqZWN0ID0gdG1wX29iamVjdDsKCQkJfQoJCX0KCQkvLyBpbiBjYXNlIHdlIGdldCBzb21lIHdpZXJkIGVycm9yLCBqdXN0IGFzc3VtZSB3ZSBoYXZlbid0IGdvbmUgb3V0IHlldAoJCWNhdGNoKGUpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9CgovLyB9fX0KLy8ge3t7IGRvbUxpYl9kZXRlY3RDb2xsaXNpb25zKCkKCi8qKgogKiBGb3IgYW55IGdpdmVuIHRhcmdldCBlbGVtZW50LCBkZXRlcm1pbmUgaWYgZWxlbWVudHMgb24gdGhlIHBhZ2UKICogYXJlIGNvbGxpZGluZyB3aXRoIGl0IHRoYXQgZG8gbm90IG9iZXkgdGhlIHJ1bGVzIG9mIHotaW5kZXguCiAqLwpmdW5jdGlvbiBkb21MaWJfZGV0ZWN0Q29sbGlzaW9ucyhpbl9vYmplY3QsIGluX3JlY292ZXIsIGluX3VzZUNhY2hlKQp7CgkvLyB0aGUgcmVhc29uIGZvciB0aGUgY2FjaGUgaXMgdGhhdCBpZiB0aGUgcm9vdCBtZW51IGlzIGJ1aWx0IGJlZm9yZQoJLy8gdGhlIHBhZ2UgaXMgZG9uZSBsb2FkaW5nLCB0aGVuIGl0IG1pZ2h0IG5vdCBmaW5kIGFsbCB0aGUgZWxlbWVudHMuCgkvLyBzbyByZWFsbHkgdGhlIG9ubHkgdGltZSB5b3UgZG9uJ3QgdXNlIGNhY2hlIGlzIHdoZW4gYnVpbGRpbmcgdGhlCgkvLyBtZW51IGFzIHBhcnQgb2YgdGhlIHBhZ2UgbG9hZAoJaWYgKCFkb21MaWJfY29sbGlzaW9uc0NhY2hlZCkKCXsKCQl2YXIgdGFncyA9IFtdOwoKCQlpZiAoIWRvbUxpYl9jYW5EcmF3T3ZlckZsYXNoKQoJCXsKCQkJdGFnc1t0YWdzLmxlbmd0aF0gPSAnb2JqZWN0JzsKCQl9CgoJCWlmICghZG9tTGliX2NhbkRyYXdPdmVyU2VsZWN0KQoJCXsKCQkJdGFnc1t0YWdzLmxlbmd0aF0gPSAnc2VsZWN0JzsKCQl9CgoJCWRvbUxpYl9jb2xsaXNpb25FbGVtZW50cyA9IGRvbUxpYl9nZXRFbGVtZW50c0J5VGFnTmFtZXModGFncywgdHJ1ZSk7CgkJZG9tTGliX2NvbGxpc2lvbnNDYWNoZWQgPSBpbl91c2VDYWNoZTsKCX0KCgkvLyBpZiB3ZSBkb24ndCBoYXZlIGEgdGlwLCB0aGVuIHVuaGlkZSBzZWxlY3RzCglpZiAoaW5fcmVjb3ZlcikKCXsKCQlmb3IgKHZhciBjbnQgPSAwOyBjbnQgPCBkb21MaWJfY29sbGlzaW9uRWxlbWVudHMubGVuZ3RoOyBjbnQrKykKCQl7CgkJCXZhciB0aGlzRWxlbWVudCA9IGRvbUxpYl9jb2xsaXNpb25FbGVtZW50c1tjbnRdOwoKCQkJaWYgKCF0aGlzRWxlbWVudC5oaWRlTGlzdCkKCQkJewoJCQkJdGhpc0VsZW1lbnQuaGlkZUxpc3QgPSBuZXcgSGFzaCgpOwoJCQl9CgoJCQl0aGlzRWxlbWVudC5oaWRlTGlzdC5yZW1vdmUoaW5fb2JqZWN0LmlkKTsKCQkJaWYgKCF0aGlzRWxlbWVudC5oaWRlTGlzdC5sZW5ndGgpCgkJCXsKCQkJCWRvbUxpYl9jb2xsaXNpb25FbGVtZW50c1tjbnRdLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CgkJCQlpZiAoZG9tTGliX2lzS29ucSkKCQkJCXsKCQkJCQlkb21MaWJfY29sbGlzaW9uRWxlbWVudHNbY250XS5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybjsKCX0KCWVsc2UgaWYgKGRvbUxpYl9jb2xsaXNpb25FbGVtZW50cy5sZW5ndGggPT0gMCkKCXsKCQlyZXR1cm47Cgl9CgoJLy8gb2theSwgd2UgaGF2ZSBhIHRpcCwgc28gaHVudCBhbmQgZGVzdHJveQoJdmFyIG9iamVjdE9mZnNldHMgPSBkb21MaWJfZ2V0T2Zmc2V0cyhpbl9vYmplY3QpOwoKCWZvciAodmFyIGNudCA9IDA7IGNudCA8IGRvbUxpYl9jb2xsaXNpb25FbGVtZW50cy5sZW5ndGg7IGNudCsrKQoJewoJCXZhciB0aGlzRWxlbWVudCA9IGRvbUxpYl9jb2xsaXNpb25FbGVtZW50c1tjbnRdOwoKCQkvLyBpZiBjb2xsaXNpb24gZWxlbWVudCBpcyBpbiBhY3RpdmUgZWxlbWVudCwgbW92ZSBvbgoJCS8vIFdBUk5JTkc6IGlzIHRoaXMgdG9vIGNvc3RseT8KCQlpZiAoZG9tTGliX2lzRGVzY2VuZGFudE9mKHRoaXNFbGVtZW50LCBpbl9vYmplY3QpKQoJCXsKCQkJY29udGludWU7CgkJfQoKCQkvLyBrb25xdWVyb3Igb25seSBoYXMgdHJvdWJsZSB3aXRoIG11bHRpcm93IHNlbGVjdHMKCQlpZiAoZG9tTGliX2lzS29ucSAmJgoJCQl0aGlzRWxlbWVudC50YWdOYW1lID09ICdTRUxFQ1QnICYmCgkJCSh0aGlzRWxlbWVudC5zaXplIDw9IDEgJiYgIXRoaXNFbGVtZW50Lm11bHRpcGxlKSkKCQl7CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKCF0aGlzRWxlbWVudC5oaWRlTGlzdCkKCQl7CgkJCXRoaXNFbGVtZW50LmhpZGVMaXN0ID0gbmV3IEhhc2goKTsKCQl9CgoJCXZhciBzZWxlY3RPZmZzZXRzID0gZG9tTGliX2dldE9mZnNldHModGhpc0VsZW1lbnQpOyAKCQl2YXIgY2VudGVyMmNlbnRlckRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KHNlbGVjdE9mZnNldHMuZ2V0KCdsZWZ0Q2VudGVyJykgLSBvYmplY3RPZmZzZXRzLmdldCgnbGVmdENlbnRlcicpLCAyKSArIE1hdGgucG93KHNlbGVjdE9mZnNldHMuZ2V0KCd0b3BDZW50ZXInKSAtIG9iamVjdE9mZnNldHMuZ2V0KCd0b3BDZW50ZXInKSwgMikpOwoJCXZhciByYWRpdXNTdW0gPSBzZWxlY3RPZmZzZXRzLmdldCgncmFkaXVzJykgKyBvYmplY3RPZmZzZXRzLmdldCgncmFkaXVzJyk7CgkJLy8gdGhlIGVuY29tcGFzc2luZyBjaXJjbGVzIGFyZSBvdmVybGFwcGluZywgZ2V0IGluIGZvciBhIGNsb3NlciBsb29rCgkJaWYgKGNlbnRlcjJjZW50ZXJEaXN0YW5jZSA8IHJhZGl1c1N1bSkKCQl7CgkJCS8vIHRpcCBpcyBsZWZ0IG9mIHNlbGVjdAoJCQlpZiAoKG9iamVjdE9mZnNldHMuZ2V0KCdsZWZ0Q2VudGVyJykgPD0gc2VsZWN0T2Zmc2V0cy5nZXQoJ2xlZnRDZW50ZXInKSAmJiBvYmplY3RPZmZzZXRzLmdldCgncmlnaHQnKSA8IHNlbGVjdE9mZnNldHMuZ2V0KCdsZWZ0JykpIHx8CgkJCS8vIHRpcCBpcyByaWdodCBvZiBzZWxlY3QKCQkJCShvYmplY3RPZmZzZXRzLmdldCgnbGVmdENlbnRlcicpID4gc2VsZWN0T2Zmc2V0cy5nZXQoJ2xlZnRDZW50ZXInKSAmJiBvYmplY3RPZmZzZXRzLmdldCgnbGVmdCcpID4gc2VsZWN0T2Zmc2V0cy5nZXQoJ3JpZ2h0JykpIHx8CgkJCS8vIHRpcCBpcyBhYm92ZSBzZWxlY3QKCQkJCShvYmplY3RPZmZzZXRzLmdldCgndG9wQ2VudGVyJykgPD0gc2VsZWN0T2Zmc2V0cy5nZXQoJ3RvcENlbnRlcicpICYmIG9iamVjdE9mZnNldHMuZ2V0KCdib3R0b20nKSA8IHNlbGVjdE9mZnNldHMuZ2V0KCd0b3AnKSkgfHwKCQkJLy8gdGlwIGlzIGJlbG93IHNlbGVjdAoJCQkJKG9iamVjdE9mZnNldHMuZ2V0KCd0b3BDZW50ZXInKSA+IHNlbGVjdE9mZnNldHMuZ2V0KCd0b3BDZW50ZXInKSAmJiBvYmplY3RPZmZzZXRzLmdldCgndG9wJykgPiBzZWxlY3RPZmZzZXRzLmdldCgnYm90dG9tJykpKQoJCQl7CgkJCQl0aGlzRWxlbWVudC5oaWRlTGlzdC5yZW1vdmUoaW5fb2JqZWN0LmlkKTsKCQkJCWlmICghdGhpc0VsZW1lbnQuaGlkZUxpc3QubGVuZ3RoKQoJCQkJewoJCQkJCXRoaXNFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CgkJCQkJaWYgKGRvbUxpYl9pc0tvbnEpCgkJCQkJewoJCQkJCQl0aGlzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdGhpc0VsZW1lbnQuaGlkZUxpc3Quc2V0KGluX29iamVjdC5pZCwgdHJ1ZSk7CgkJCQl0aGlzRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CgkJCQlpZiAoZG9tTGliX2lzS29ucSkKCQkJCXsKCQkJCQl0aGlzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQkJfQoJCQl9CgkJfQoJfQp9CgovLyB9fX0KLy8ge3t7IGRvbUxpYl9nZXRPZmZzZXRzKCkKCmZ1bmN0aW9uIGRvbUxpYl9nZXRPZmZzZXRzKGluX29iamVjdCkKewoJdmFyIG9yaWdpbmFsT2JqZWN0ID0gaW5fb2JqZWN0OwoJdmFyIG9yaWdpbmFsV2lkdGggPSBpbl9vYmplY3Qub2Zmc2V0V2lkdGg7Cgl2YXIgb3JpZ2luYWxIZWlnaHQgPSBpbl9vYmplY3Qub2Zmc2V0SGVpZ2h0OwoJdmFyIG9mZnNldExlZnQgPSAwOwoJdmFyIG9mZnNldFRvcCA9IDA7CgoJd2hpbGUgKGluX29iamVjdCkKCXsKCQlvZmZzZXRMZWZ0ICs9IGluX29iamVjdC5vZmZzZXRMZWZ0OwoJCW9mZnNldFRvcCArPSBpbl9vYmplY3Qub2Zmc2V0VG9wOwoJCWluX29iamVjdCA9IGluX29iamVjdC5vZmZzZXRQYXJlbnQ7Cgl9CgoJLy8gTWFjSUUgbWlzcmVwb3J0cyB0aGUgb2Zmc2V0cyAoZXZlbiB3aXRoIG1hcmdpbjogMCBpbiBib2R5e30pLCBzdGlsbCBub3QgcGVyZmVjdAoJaWYgKGRvbUxpYl9pc01hY0lFKSB7CgkJb2Zmc2V0TGVmdCArPSAxMDsKCQlvZmZzZXRUb3AgKz0gMTA7Cgl9CgoJcmV0dXJuIG5ldyBIYXNoKAoJCSdsZWZ0JywJCW9mZnNldExlZnQsCgkJJ3RvcCcsCQlvZmZzZXRUb3AsCgkJJ3JpZ2h0JywJb2Zmc2V0TGVmdCArIG9yaWdpbmFsV2lkdGgsCgkJJ2JvdHRvbScsCW9mZnNldFRvcCArIG9yaWdpbmFsSGVpZ2h0LAoJCSdsZWZ0Q2VudGVyJywJb2Zmc2V0TGVmdCArIG9yaWdpbmFsV2lkdGgvMiwKCQkndG9wQ2VudGVyJywJb2Zmc2V0VG9wICsgb3JpZ2luYWxIZWlnaHQvMiwKCQkncmFkaXVzJywJTWF0aC5tYXgob3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQpIAoJKTsKfQoKLy8gfX19Ci8vIHt7eyBkb21MaWJfc2V0VGltZW91dCgpCgpmdW5jdGlvbiBkb21MaWJfc2V0VGltZW91dChpbl9mdW5jdGlvbiwgaW5fdGltZW91dCwgaW5fYXJncykKewoJaWYgKHR5cGVvZihpbl9hcmdzKSA9PSAndW5kZWZpbmVkJykKCXsKCQlpbl9hcmdzID0gW107Cgl9CgoJaWYgKGluX3RpbWVvdXQgPT0gLTEpCgl7CgkJLy8gdGltZW91dCBldmVudCBpcyBkaXNhYmxlZAoJCXJldHVybjsKCX0KCWVsc2UgaWYgKGluX3RpbWVvdXQgPT0gMCkKCXsKCQlpbl9mdW5jdGlvbihpbl9hcmdzKTsKCQlyZXR1cm4gMDsKCX0KCgkvLyBtdXN0IG1ha2UgYSBjb3B5IG9mIHRoZSBhcmd1bWVudHMgc28gdGhhdCB3ZSByZWxlYXNlIHRoZSByZWZlcmVuY2UKCXZhciBhcmdzID0gZG9tTGliX2Nsb25lKGluX2FyZ3MpOwoKCWlmICghZG9tTGliX2hhc0Jyb2tlblRpbWVvdXQpCgl7CgkJcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGluX2Z1bmN0aW9uKGFyZ3MpOyB9LCBpbl90aW1lb3V0KTsKCX0KCWVsc2UKCXsKCQl2YXIgaWQgPSBkb21MaWJfdGltZW91dFN0YXRlSWQrKzsKCQl2YXIgZGF0YSA9IG5ldyBIYXNoKCk7CgkJZGF0YS5zZXQoJ2Z1bmN0aW9uJywgaW5fZnVuY3Rpb24pOwoJCWRhdGEuc2V0KCdhcmdzJywgYXJncyk7CgkJZG9tTGliX3RpbWVvdXRTdGF0ZXMuc2V0KGlkLCBkYXRhKTsKCgkJZGF0YS5zZXQoJ3RpbWVvdXRJZCcsIHNldFRpbWVvdXQoJ2RvbUxpYl90aW1lb3V0U3RhdGVzLmdldCgnICsgaWQgKyAnKS5nZXQoXCdmdW5jdGlvblwnKShkb21MaWJfdGltZW91dFN0YXRlcy5nZXQoJyArIGlkICsgJykuZ2V0KFwnYXJnc1wnKSk7IGRvbUxpYl90aW1lb3V0U3RhdGVzLnJlbW92ZSgnICsgaWQgKyAnKTsnLCBpbl90aW1lb3V0KSk7CgkJcmV0dXJuIGlkOwoJfQp9CgovLyB9fX0KLy8ge3t7IGRvbUxpYl9jbGVhclRpbWVvdXQoKQoKZnVuY3Rpb24gZG9tTGliX2NsZWFyVGltZW91dChpbl9pZCkKewoJaWYgKCFkb21MaWJfaGFzQnJva2VuVGltZW91dCkKCXsKCQljbGVhclRpbWVvdXQoaW5faWQpOwoJfQoJZWxzZQoJewoJCWlmIChkb21MaWJfdGltZW91dFN0YXRlcy5oYXMoaW5faWQpKQoJCXsKCQkJY2xlYXJUaW1lb3V0KGRvbUxpYl90aW1lb3V0U3RhdGVzLmdldChpbl9pZCkuZ2V0KCd0aW1lb3V0SWQnKSkKCQkJZG9tTGliX3RpbWVvdXRTdGF0ZXMucmVtb3ZlKGluX2lkKTsKCQl9Cgl9Cn0KCi8vIH19fQovLyB7e3sgZG9tTGliX2dldEV2ZW50UG9zaXRpb24oKQoKZnVuY3Rpb24gZG9tTGliX2dldEV2ZW50UG9zaXRpb24oaW5fZXZlbnRPYmopCnsKCXZhciBldmVudFBvc2l0aW9uID0gbmV3IEhhc2goJ3gnLCAwLCAneScsIDAsICdzY3JvbGxYJywgMCwgJ3Njcm9sbFknLCAwKTsKCgkvLyBJRSB2YXJpZXMgZGVwZW5kaW5nIG9uIHN0YW5kYXJkIGNvbXBsaWFuY2UgbW9kZQoJaWYgKGRvbUxpYl9pc0lFKQoJewoJCXZhciBkb2MgPSAoZG9tTGliX3N0YW5kYXJkc01vZGUgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBkb2N1bWVudC5ib2R5KTsKCQkvLyBOT1RFOiBldmVudHMgbWF5IGZpcmUgYmVmb3JlIHRoZSBib2R5IGhhcyBiZWVuIGxvYWRlZAoJCWlmIChkb2MpCgkJewoJCQlldmVudFBvc2l0aW9uLnNldCgneCcsIGluX2V2ZW50T2JqLmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCk7CgkJCWV2ZW50UG9zaXRpb24uc2V0KCd5JywgaW5fZXZlbnRPYmouY2xpZW50WSArIGRvYy5zY3JvbGxUb3ApOwoJCQlldmVudFBvc2l0aW9uLnNldCgnc2Nyb2xsWCcsIGRvYy5zY3JvbGxMZWZ0KTsKCQkJZXZlbnRQb3NpdGlvbi5zZXQoJ3Njcm9sbFknLCBkb2Muc2Nyb2xsVG9wKTsKCQl9Cgl9CgllbHNlCgl7CgkJZXZlbnRQb3NpdGlvbi5zZXQoJ3gnLCBpbl9ldmVudE9iai5wYWdlWCk7CgkJZXZlbnRQb3NpdGlvbi5zZXQoJ3knLCBpbl9ldmVudE9iai5wYWdlWSk7CgkJZXZlbnRQb3NpdGlvbi5zZXQoJ3Njcm9sbFgnLCBpbl9ldmVudE9iai5wYWdlWCAtIGluX2V2ZW50T2JqLmNsaWVudFgpOwoJCWV2ZW50UG9zaXRpb24uc2V0KCdzY3JvbGxZJywgaW5fZXZlbnRPYmoucGFnZVkgLSBpbl9ldmVudE9iai5jbGllbnRZKTsKCX0KCglyZXR1cm4gZXZlbnRQb3NpdGlvbjsKfQoKLy8gfX19Ci8vIHt7eyBkb21MaWJfY2FuY2VsQnViYmxlKCkKCmZ1bmN0aW9uIGRvbUxpYl9jYW5jZWxCdWJibGUoaW5fZXZlbnQpCnsKCXZhciBldmVudE9iaiA9IGluX2V2ZW50ID8gaW5fZXZlbnQgOiB3aW5kb3cuZXZlbnQ7CglldmVudE9iai5jYW5jZWxCdWJibGUgPSB0cnVlOwp9CgovLyB9fX0KLy8ge3t7IGRvbUxpYl9nZXRJRnJhbWVSZWZlcmVuY2UoKQoKZnVuY3Rpb24gZG9tTGliX2dldElGcmFtZVJlZmVyZW5jZShpbl9mcmFtZSkKewoJaWYgKGRvbUxpYl9pc0dlY2tvIHx8IGRvbUxpYl9pc0lFKQoJewoJCXJldHVybiBpbl9mcmFtZS5mcmFtZUVsZW1lbnQ7Cgl9CgllbHNlCgl7CgkJLy8gd2UgY291bGQgZWl0aGVyIGRvIGl0IHRoaXMgd2F5IG9yIHJlcXVpcmUgYW4gaWQgb24gdGhlIGZyYW1lCgkJLy8gZXF1aXZhbGVudCB0byB0aGUgbmFtZQoJCXZhciBuYW1lID0gaW5fZnJhbWUubmFtZTsKCQlpZiAoIW5hbWUgfHwgIWluX2ZyYW1lLnBhcmVudCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCXZhciBjYW5kaWRhdGVzID0gaW5fZnJhbWUucGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGNhbmRpZGF0ZXMubGVuZ3RoOyBpKyspCgkJewoJCQlpZiAoY2FuZGlkYXRlc1tpXS5uYW1lID09IG5hbWUpCgkJCXsKCQkJCXJldHVybiBjYW5kaWRhdGVzW2ldOwoJCQl9CgkJfQoJfQp9CgovLyB9fX0KLy8ge3t7IGRvbUxpYl9nZXRFbGVtZW50c0J5Q2xhc3MoKQoKZnVuY3Rpb24gZG9tTGliX2dldEVsZW1lbnRzQnlDbGFzcyhpbl9jbGFzcykKewoJdmFyIGVsZW1lbnRzID0gZG9tTGliX2lzSUU1ID8gZG9jdW1lbnQuYWxsIDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsJCgl2YXIgbWF0Y2hlcyA9IFtdOwkKCXZhciBjbnQgPSAwOwoJZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKCXsKCQlpZiAoKCIgIiArIGVsZW1lbnRzW2ldLmNsYXNzTmFtZSArICIgIikuaW5kZXhPZigiICIgKyBpbl9jbGFzcyArICIgIikgIT0gLTEpCgkJewoJCQltYXRjaGVzW2NudCsrXSA9IGVsZW1lbnRzW2ldOwoJCX0KCX0KCglyZXR1cm4gbWF0Y2hlczsKfQoKLy8gfX19Ci8vIHt7ewoKZnVuY3Rpb24gZG9tTGliX2dldEVsZW1lbnRzQnlUYWdOYW1lcyhpbl9saXN0LCBpbl9leGNsdWRlSGlkZGVuKQp7Cgl2YXIgZWxlbWVudHMgPSBbXTsKCWZvciAodmFyIGkgPSAwOyBpIDwgaW5fbGlzdC5sZW5ndGg7IGkrKykKCXsKCQl2YXIgbWF0Y2hlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGluX2xpc3RbaV0pOwoJCWZvciAodmFyIGogPSAwOyBqIDwgbWF0Y2hlcy5sZW5ndGg7IGorKykKCQl7CgkJCWlmIChpbl9leGNsdWRlSGlkZGVuICYmIGRvbUxpYl9nZXRDb21wdXRlZFN0eWxlKG1hdGNoZXNbal0sICd2aXNpYmlsaXR5JykgPT0gJ2hpZGRlbicpCgkJCXsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQllbGVtZW50c1tlbGVtZW50cy5sZW5ndGhdID0gbWF0Y2hlc1tqXTsJCgkJfQoJfQoKCXJldHVybiBlbGVtZW50czsKfQoKLy8gfX19Ci8vIHt7ewoKZnVuY3Rpb24gZG9tTGliX2dldENvbXB1dGVkU3R5bGUoaW5fb2JqLCBpbl9wcm9wZXJ0eSkKewoJaWYgKGRvbUxpYl9pc0lFKQoJewoJCXZhciBodW1wQmFja1Byb3AgPSBpbl9wcm9wZXJ0eS5yZXBsYWNlKC8tKC4pLywgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudG9VcHBlckNhc2UoKTsgfSk7CgkJcmV0dXJuIGV2YWwoJ2luX29iai5jdXJyZW50U3R5bGUuJyArIGh1bXBCYWNrUHJvcCk7Cgl9CgkvLyBnZXRDb21wdXRlZFN0eWxlKCkgaXMgYnJva2VuIGluIGtvbnF1ZXJvciwgc28gbGV0J3MgZ28gZm9yIHRoZSBzdHlsZSBvYmplY3QKCWVsc2UgaWYgKGRvbUxpYl9pc0tvbnEpCgl7CgkJdmFyIGh1bXBCYWNrUHJvcCA9IGluX3Byb3BlcnR5LnJlcGxhY2UoLy0oLikvLCBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi50b1VwcGVyQ2FzZSgpOyB9KTsKCQlyZXR1cm4gZXZhbCgnaW5fb2JqLnN0eWxlLicgKyBpbl9wcm9wZXJ0eSk7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaW5fb2JqLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGluX3Byb3BlcnR5KTsKCX0KfQoKLy8gfX19Ci8vIHt7eyBtYWtlVHJ1ZSgpCgpmdW5jdGlvbiBtYWtlVHJ1ZSgpCnsKCXJldHVybiB0cnVlOwp9CgovLyB9fX0KLy8ge3t7IG1ha2VGYWxzZSgpCgpmdW5jdGlvbiBtYWtlRmFsc2UoKQp7CglyZXR1cm4gZmFsc2U7Cn0KCi8vIH19fQo=";s:33:"pointimagewiki/bib/domtt/domTT.js";s:37320:"LyoqICRJZDogZG9tVFQuanMgMTk1MSAyMDA1LTA3LTE3IDE2OjIyOjM0WiBkYWxsZW4gJCAqLwovLyB7e3sgbGljZW5zZQoKLyoKICogQ29weXJpZ2h0IDIwMDItMjAwNSBEYW4gQWxsZW4sIE1vamF2ZWxpbnV4LmNvbSAoZGFuLmFsbGVuQG1vamF2ZWxpbnV4LmNvbSkKICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwoKLy8gfX19Ci8vIHt7eyBpbnRybwoKLyoqCiAqIFRpdGxlOiBET00gVG9vbHRpcCBMaWJyYXJ5CiAqIFZlcnNpb246IDAuNy4xCiAqCiAqIFN1bW1hcnk6CiAqIEFsbG93cyBkZXZlbG9wZXJzIHRvIGFkZCBjdXN0b20gdG9vbHRpcHMgdG8gdGhlIHdlYnBhZ2VzLiAgVG9vbHRpcHMgYXJlCiAqIGdlbmVyYXRlZCB1c2luZyB0aGUgZG9tVFRfYWN0aXZhdGUoKSBmdW5jdGlvbiBhbmQgY3VzdG9taXplZCBieSBzZXR0aW5nCiAqIGEgaGFuZGZ1bCBvZiBvcHRpb25zLgogKgogKiBNYWludGFpbmVyOiBEYW4gQWxsZW4gPGRhbi5hbGxlbkBtb2phdmVsaW51eC5jb20+CiAqIENvbnRyaWJ1dG9yczoKICogCQlKb3NoIEdyb3NzIDxqb3NoQGpwb3J0YWxob21lLmNvbT4KICoJCUphc29uIFJ1c3QgPGphc29uQHJ1c3R5cGFydHMuY29tPgogKgogKiBMaWNlbnNlOiBBcGFjaGUgMi4wCiAqIEhvd2V2ZXIsIGlmIHlvdSB1c2UgdGhpcyBsaWJyYXJ5LCB5b3UgZWFybiB0aGUgcG9zaXRpb24gb2Ygb2ZmaWNpYWwgYnVnCiAqIHJlcG9ydGVyIDopIFBsZWFzZSBwb3N0IHF1ZXN0aW9ucyBvciBwcm9ibGVtIHJlcG9ydHMgdG8gdGhlIG5ld3Nncm91cDoKICoKICogICBodHRwOi8vZ3JvdXBzLWJldGEuZ29vZ2xlLmNvbS9ncm91cC9kb20tdG9vbHRpcAogKgogKiBJZiB5b3UgYXJlIGRvaW5nIHRoaXMgZm9yIGNvbW1lcmNpYWwgd29yaywgcGVyaGFwcyB5b3UgY291bGQgc2VuZCBtZSBhIGZldwogKiBTdGFyYnVja3MgQ29mZmVlIGdpZnQgZG9sbGFycyBvciBQYXlQYWwgYnVja3MgdG8gZW5jb3VyYWdlIGZ1dHVyZQogKiBkZXZlbG9wZW1lbnQgKE5PVCBSRVFVSVJFRCkuICBFLW1haWwgbWUgZm9yIG15IHNuYWlsIG1haWwgYWRkcmVzcy4KCiAqCiAqIEhvbWVwYWdlOiBodHRwOi8vd3d3Lm1vamF2ZWxpbnV4LmNvbS9wcm9qZWN0cy9kb210b29sdGlwLwogKgogKiBOZXdzZ3JvdXA6IGh0dHA6Ly9ncm91cHMtYmV0YS5nb29nbGUuY29tL2dyb3VwL2RvbS10b29sdGlwCiAqCiAqIEZyZXNobWVhdCBQcm9qZWN0OiBodHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy9kb210dC8/dG9waWNfaWQ9OTIKICoKICogVXBkYXRlZDogMjAwNS8wNy8xNgogKgogKiBTdXBwb3J0ZWQgQnJvd3NlcnM6CiAqIE1vemlsbGEgKEdlY2tvKSwgSUUgNS41KywgSUUgb24gTWFjLCBTYWZhcmksIEtvbnF1ZXJvciwgT3BlcmEgNwogKgogKiBVc2FnZToKICogUGxlYXNlIHNlZSB0aGUgSE9XVE8gZG9jdW1lbnRhdGlvbi4KKiovCgovLyB9fX0KLy8ge3t7IHNldHRpbmdzIChlZGl0YWJsZSkKCi8vIElFIG1vdXNlIGV2ZW50cyBzZWVtIHRvIGJlIG9mZiBieSAyIHBpeGVscwp2YXIgZG9tVFRfb2Zmc2V0WCA9IChkb21MaWJfaXNJRSA/IC0yIDogMCk7CnZhciBkb21UVF9vZmZzZXRZID0gKGRvbUxpYl9pc0lFID8gNCA6IDIpOwp2YXIgZG9tVFRfZGlyZWN0aW9uID0gJ3NvdXRoZWFzdCc7CnZhciBkb21UVF9tb3VzZUhlaWdodCA9IGRvbUxpYl9pc0lFID8gMTMgOiAxOTsKdmFyIGRvbVRUX2Nsb3NlTGluayA9ICdYJzsKdmFyIGRvbVRUX2Nsb3NlQWN0aW9uID0gJ2hpZGUnOwp2YXIgZG9tVFRfYWN0aXZhdGVEZWxheSA9IDUwMDsKdmFyIGRvbVRUX21heFdpZHRoID0gZmFsc2U7CnZhciBkb21UVF9zdHlsZUNsYXNzID0gJ2RvbVRUJzsKdmFyIGRvbVRUX2ZhZGUgPSAnbmVpdGhlcic7CnZhciBkb21UVF9saWZldGltZSA9IDA7CnZhciBkb21UVF9ncmlkID0gMDsKdmFyIGRvbVRUX3RyYWlsRGVsYXkgPSAyMDA7CnZhciBkb21UVF91c2VHbG9iYWxNb3VzZVBvc2l0aW9uID0gdHJ1ZTsKdmFyIGRvbVRUX3NjcmVlbkVkZ2VEZXRlY3Rpb24gPSB0cnVlOwp2YXIgZG9tVFRfc2NyZWVuRWRnZVBhZGRpbmcgPSA0Owp2YXIgZG9tVFRfb25lT25seSA9IGZhbHNlOwp2YXIgZG9tVFRfZHJhZ2dhYmxlID0gZmFsc2U7CmlmICh0eXBlb2YoZG9tVFRfZHJhZ0VuYWJsZWQpID09ICd1bmRlZmluZWQnKQp7Cglkb21UVF9kcmFnRW5hYmxlZCA9IGZhbHNlOwp9CgovLyB9fX0KLy8ge3t7IGdsb2JhbHMgKERPIE5PVCBFRElUKQoKdmFyIGRvbVRUX3ByZWRlZmluZWQgPSBuZXcgSGFzaCgpOwovLyB0b29sdGlwcyBhcmUga2V5ZWQgb24gYm90aCB0aGUgdGlwIGlkIGFuZCB0aGUgb3duZXIgaWQsCi8vIHNpbmNlIGV2ZW50cyBjYW4gb3JpZ2luYXRlIG9uIGVpdGhlciBvYmplY3QKdmFyIGRvbVRUX3Rvb2x0aXBzID0gbmV3IEhhc2goKTsKdmFyIGRvbVRUX2xhc3RPcGVuZWQgPSAwOwoKLy8gfX19Ci8vIHt7eyBkb2N1bWVudC5vbm1vdXNlbW92ZQoKaWYgKGRvbUxpYl91c2VMaWJyYXJ5ICYmIGRvbVRUX3VzZUdsb2JhbE1vdXNlUG9zaXRpb24pCnsKCXZhciBkb21UVF9tb3VzZVBvc2l0aW9uID0gbmV3IEhhc2goKTsKCWRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24oaW5fZXZlbnQpCgl7CgkJaWYgKHR5cGVvZihpbl9ldmVudCkgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQlpbl9ldmVudCA9IGV2ZW50OwoJCX0KCgkJZG9tVFRfbW91c2VQb3NpdGlvbiA9IGRvbUxpYl9nZXRFdmVudFBvc2l0aW9uKGluX2V2ZW50KTsKCQlpZiAoZG9tVFRfZHJhZ0VuYWJsZWQgJiYgZG9tVFRfZHJhZ01vdXNlRG93bikKCQl7CgkJCWRvbVRUX2RyYWdVcGRhdGUoaW5fZXZlbnQpOwoJCX0KCX0KfQoKLy8gfX19Ci8vIHt7eyBkb21UVF9hY3RpdmF0ZSgpCgpmdW5jdGlvbiBkb21UVF9hY3RpdmF0ZShpbl90aGlzLCBpbl9ldmVudCkKewoJaWYgKCFkb21MaWJfdXNlTGlicmFyeSkgeyByZXR1cm4gZmFsc2U7IH0KCgkvLyBtYWtlIHN1cmUgaW5fZXZlbnQgaXMgc2V0IChmb3IgSUUsIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byB1c2Ugd2luZG93LmV2ZW50KQoJaWYgKHR5cGVvZihpbl9ldmVudCkgPT0gJ3VuZGVmaW5lZCcpCgl7CgkJaW5fZXZlbnQgPSB3aW5kb3cuZXZlbnQ7Cgl9CgoJdmFyIG93bmVyID0gZG9jdW1lbnQuYm9keTsKCS8vIHdlIGhhdmUgYW4gYWN0aXZlIGV2ZW50IHNvIGdldCB0aGUgb3duZXIKCWlmIChpbl9ldmVudC50eXBlLm1hdGNoKC9rZXl8bW91c2V8Y2xpY2t8Y29udGV4dG1lbnUvaSkpCgl7CgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgbm90aGluZyBoaWdoZXIgdGhhbiB0aGUgYm9keSBlbGVtZW50CgkJaWYgKGluX3RoaXMubm9kZVR5cGUgJiYgaW5fdGhpcy5ub2RlVHlwZSAhPSBkb2N1bWVudC5ET0NVTUVOVF9OT0RFKQoJCXsKCQkJdmFyIG93bmVyID0gaW5fdGhpczsKCQl9Cgl9CgkvLyBub24gYWN0aXZlIGV2ZW50IChtYWtlIHN1cmUgd2Ugd2VyZSBwYXNzZWQgYSBzdHJpbmcgaWQpCgllbHNlCgl7CgkJaWYgKHR5cGVvZihpbl90aGlzKSAhPSAnb2JqZWN0JyAmJiAhKG93bmVyID0gZG9tVFRfdG9vbHRpcHMuZ2V0KGluX3RoaXMpKSkKCQl7CgkJCW93bmVyID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CgkJCW93bmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCW93bmVyLmlkID0gaW5fdGhpczsKCQl9Cgl9CgoJLy8gbWFrZSBzdXJlIHRoZSBvd25lciBoYXMgYSB1bmlxdWUgaWQKCWlmICghb3duZXIuaWQpCgl7CgkJb3duZXIuaWQgPSAnX19hdXRvSWQnICsgZG9tTGliX2F1dG9JZCsrOwoJfQoKCS8vIHNlZSBpZiB3ZSBzaG91bGQgb25seSBiZSBvcGVubmluZyBvbmUgdGlwIGF0IGEgdGltZQoJLy8gTk9URTogdGhpcyBpcyBub3QgInBlcmZlY3QiIHlldCBzaW5jZSBpdCByZWFsbHkgc3RlcHMgb24gYW55IG90aGVyCgkvLyB0aXAgd29ya2luZyBvbiBmYWRlIG91dCBvciBkZWxheWVkIGNsb3NlLCBidXQgaXQgZ2V0J3MgdGhlIGpvYiBkb25lCglpZiAoZG9tVFRfb25lT25seSAmJiBkb21UVF9sYXN0T3BlbmVkKQoJewoJCWRvbVRUX2RlYWN0aXZhdGUoZG9tVFRfbGFzdE9wZW5lZCk7Cgl9CgoJZG9tVFRfbGFzdE9wZW5lZCA9IG93bmVyLmlkOwoKCXZhciB0b29sdGlwID0gZG9tVFRfdG9vbHRpcHMuZ2V0KG93bmVyLmlkKTsKCWlmICh0b29sdGlwKQoJewoJCWlmICh0b29sdGlwLmdldCgnZXZlbnRUeXBlJykgIT0gaW5fZXZlbnQudHlwZSkKCQl7CgkJCWlmICh0b29sdGlwLmdldCgndHlwZScpID09ICdncmVhc3knKQoJCQl7CgkJCQl0b29sdGlwLnNldCgnY2xvc2VBY3Rpb24nLCAnZGVzdHJveScpOwoJCQkJZG9tVFRfZGVhY3RpdmF0ZShvd25lci5pZCk7CgkJCX0KCQkJZWxzZSBpZiAodG9vbHRpcC5nZXQoJ3N0YXR1cycpICE9ICdpbmFjdGl2ZScpCgkJCXsKCQkJCXJldHVybiBvd25lci5pZDsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlpZiAodG9vbHRpcC5nZXQoJ3N0YXR1cycpID09ICdpbmFjdGl2ZScpCgkJCXsKCQkJCXRvb2x0aXAuc2V0KCdzdGF0dXMnLCAncGVuZGluZycpOwoJCQkJdG9vbHRpcC5zZXQoJ2FjdGl2YXRlVGltZW91dCcsIGRvbUxpYl9zZXRUaW1lb3V0KGRvbVRUX3J1blNob3csIHRvb2x0aXAuZ2V0KCdkZWxheScpLCBbb3duZXIuaWQsIGluX2V2ZW50XSkpOwoKCQkJCXJldHVybiBvd25lci5pZDsKCQkJfQoJCQkvLyBlaXRoZXIgcGVuZGluZyBvciBhY3RpdmUsIGxldCBpdCBiZQoJCQllbHNlCgkJCXsKCQkJCXJldHVybiBvd25lci5pZDsKCQkJfQoJCX0KCX0KCgkvLyBzZXR1cCB0aGUgZGVmYXVsdCBvcHRpb25zIGhhc2gKCXZhciBvcHRpb25zID0gbmV3IEhhc2goCgkJJ2NhcHRpb24nLAkJJycsCgkJJ2NvbnRlbnQnLAkJJycsCgkJJ2NsZWFyTW91c2UnLAl0cnVlLAoJCSdjbG9zZUFjdGlvbicsCWRvbVRUX2Nsb3NlQWN0aW9uLAoJCSdjbG9zZUxpbmsnLAlkb21UVF9jbG9zZUxpbmssCgkJJ2RlbGF5JywJCWRvbVRUX2FjdGl2YXRlRGVsYXksCgkJJ2RpcmVjdGlvbicsCWRvbVRUX2RpcmVjdGlvbiwKCQknZHJhZ2dhYmxlJywJZG9tVFRfZHJhZ2dhYmxlLAoJCSdmYWRlJywJCQlkb21UVF9mYWRlLAoJCSdmYWRlTWF4JywJCTEwMCwKCQknZ3JpZCcsCQkJZG9tVFRfZ3JpZCwKCQknaWQnLAkJCSdbZG9tVFRdJyArIG93bmVyLmlkLAoJCSdpbmZyYW1lJywJCWZhbHNlLAoJCSdsaWZldGltZScsCQlkb21UVF9saWZldGltZSwKCQknb2Zmc2V0WCcsCQlkb21UVF9vZmZzZXRYLAoJCSdvZmZzZXRZJywJCWRvbVRUX29mZnNldFksCgkJJ3BhcmVudCcsCQlkb2N1bWVudC5ib2R5LAoJCSdwb3NpdGlvbicsCQknYWJzb2x1dGUnLAoJCSdzdHlsZUNsYXNzJywJZG9tVFRfc3R5bGVDbGFzcywKCQkndHlwZScsCQkJJ2dyZWFzeScsCgkJJ3RyYWlsJywJCWZhbHNlLAoJCSdsYXp5JywJCQlmYWxzZQoJKTsKCgkvLyBsb2FkIGluIHRoZSBvcHRpb25zIGZyb20gdGhlIGZ1bmN0aW9uIGNhbGwKCWZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAyKQoJewoJCS8vIGxvYWQgaW4gcHJlZGVmaW5lZAoJCWlmIChhcmd1bWVudHNbaV0gPT0gJ3ByZWRlZmluZWQnKQoJCXsKCQkJdmFyIHByZWRlZmluZWRPcHRpb25zID0gZG9tVFRfcHJlZGVmaW5lZC5nZXQoYXJndW1lbnRzW2kgKyAxXSk7CgkJCWZvciAodmFyIGogaW4gcHJlZGVmaW5lZE9wdGlvbnMuZWxlbWVudERhdGEpCgkJCXsKCQkJCW9wdGlvbnMuc2V0KGosIHByZWRlZmluZWRPcHRpb25zLmdldChqKSk7CgkJCX0KCQl9CgkJLy8gc2V0IG9wdGlvbgoJCWVsc2UKCQl7CgkJCW9wdGlvbnMuc2V0KGFyZ3VtZW50c1tpXSwgYXJndW1lbnRzW2kgKyAxXSk7CgkJfQoJfQoKCW9wdGlvbnMuc2V0KCdldmVudFR5cGUnLCBpbl9ldmVudC50eXBlKTsKCgkvLyBpbW1lZGlhdGVseSBzZXQgdGhlIHN0YXR1cyB0ZXh0IGlmIHByb3ZpZGVkCglpZiAob3B0aW9ucy5oYXMoJ3N0YXR1c1RleHQnKSkKCXsKCQl0cnkgeyB3aW5kb3cuc3RhdHVzID0gb3B0aW9ucy5nZXQoJ3N0YXR1c1RleHQnKTsgfSBjYXRjaChlKSB7fQoJfQoKCS8vIGlmIHdlIGRpZG4ndCBnaXZlIGNvbnRlbnQuLi5hc3N1bWUgd2UganVzdCB3YW50ZWQgdG8gY2hhbmdlIHRoZSBzdGF0dXMgYW5kIHJldHVybgoJaWYgKCFvcHRpb25zLmhhcygnY29udGVudCcpIHx8IG9wdGlvbnMuZ2V0KCdjb250ZW50JykgPT0gJycgfHwgb3B0aW9ucy5nZXQoJ2NvbnRlbnQnKSA9PSBudWxsKQoJewoJCWlmICh0eXBlb2Yob3duZXIub25tb3VzZW91dCkgIT0gJ2Z1bmN0aW9uJykKCQl7CgkJCW93bmVyLm9ubW91c2VvdXQgPSBmdW5jdGlvbihpbl9ldmVudCkgeyBkb21UVF9tb3VzZW91dCh0aGlzLCBpbl9ldmVudCk7IH07CgkJfQoKCQlyZXR1cm4gb3duZXIuaWQ7Cgl9CgoJb3B0aW9ucy5zZXQoJ293bmVyJywgb3duZXIpOwoKCWRvbVRUX2NyZWF0ZShvcHRpb25zKTsKCgkvLyBkZXRlcm1pbmUgdGhlIHNob3cgZGVsYXkKCW9wdGlvbnMuc2V0KCdkZWxheScsIGluX2V2ZW50LnR5cGUubWF0Y2goL2NsaWNrfG1vdXNlZG93bnxjb250ZXh0bWVudS9pKSA/IDAgOiBwYXJzZUludChvcHRpb25zLmdldCgnZGVsYXknKSkpOwoJZG9tVFRfdG9vbHRpcHMuc2V0KG93bmVyLmlkLCBvcHRpb25zKTsKCWRvbVRUX3Rvb2x0aXBzLnNldChvcHRpb25zLmdldCgnaWQnKSwgb3B0aW9ucyk7CglvcHRpb25zLnNldCgnc3RhdHVzJywgJ3BlbmRpbmcnKTsKCW9wdGlvbnMuc2V0KCdhY3RpdmF0ZVRpbWVvdXQnLCBkb21MaWJfc2V0VGltZW91dChkb21UVF9ydW5TaG93LCBvcHRpb25zLmdldCgnZGVsYXknKSwgW293bmVyLmlkLCBpbl9ldmVudF0pKTsKCglyZXR1cm4gb3duZXIuaWQ7Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfY3JlYXRlKCkKCmZ1bmN0aW9uIGRvbVRUX2NyZWF0ZShpbl9vcHRpb25zKQp7Cgl2YXIgdGlwT3duZXIgPSBpbl9vcHRpb25zLmdldCgnb3duZXInKTsKCXZhciBwYXJlbnRPYmogPSBpbl9vcHRpb25zLmdldCgncGFyZW50Jyk7Cgl2YXIgcGFyZW50RG9jID0gcGFyZW50T2JqLm93bmVyRG9jdW1lbnQgfHwgcGFyZW50T2JqLmRvY3VtZW50OwoKCS8vIGNyZWF0ZSB0aGUgdG9vbHRpcCBhbmQgaGlkZSBpdAoJdmFyIHRpcE9iaiA9IHBhcmVudE9iai5hcHBlbmRDaGlsZChwYXJlbnREb2MuY3JlYXRlRWxlbWVudCgnZGl2JykpOwoJdGlwT2JqLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKCXRpcE9iai5zdHlsZS5sZWZ0ID0gJzBweCc7Cgl0aXBPYmouc3R5bGUudG9wID0gJzBweCc7Cgl0aXBPYmouc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwoJdGlwT2JqLmlkID0gaW5fb3B0aW9ucy5nZXQoJ2lkJyk7Cgl0aXBPYmouY2xhc3NOYW1lID0gaW5fb3B0aW9ucy5nZXQoJ3N0eWxlQ2xhc3MnKTsKCgkvLyBjb250ZW50IG9mIHRpcCBhcyBvYmplY3QKCXZhciBjb250ZW50OwoJdmFyIHRhYmxlTGF5b3V0ID0gZmFsc2U7CgoJaWYgKGluX29wdGlvbnMuZ2V0KCdjYXB0aW9uJykgfHwgKGluX29wdGlvbnMuZ2V0KCd0eXBlJykgPT0gJ3N0aWNreScgJiYgaW5fb3B0aW9ucy5nZXQoJ2NhcHRpb24nKSAhPT0gZmFsc2UpKQoJewoJCXRhYmxlTGF5b3V0ID0gdHJ1ZTsKCQkvLyBsYXlvdXQgdGhlIHRpcCB3aXRoIGEgaGlkZGVuIGZvcm1hdHRpbmcgdGFibGUKCQl2YXIgdGlwTGF5b3V0VGFibGUgPSB0aXBPYmouYXBwZW5kQ2hpbGQocGFyZW50RG9jLmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJykpOwoJCXRpcExheW91dFRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJzsKCQlpZiAoZG9tTGliX2lzS0hUTUwpCgkJewoJCQl0aXBMYXlvdXRUYWJsZS5jZWxsU3BhY2luZyA9IDA7CgkJfQoKCQl2YXIgdGlwTGF5b3V0VGJvZHkgPSB0aXBMYXlvdXRUYWJsZS5hcHBlbmRDaGlsZChwYXJlbnREb2MuY3JlYXRlRWxlbWVudCgndGJvZHknKSk7CgoJCXZhciBudW1DYXB0aW9uQ2VsbHMgPSAwOwoJCXZhciBjYXB0aW9uUm93ID0gdGlwTGF5b3V0VGJvZHkuYXBwZW5kQ2hpbGQocGFyZW50RG9jLmNyZWF0ZUVsZW1lbnQoJ3RyJykpOwoJCXZhciBjYXB0aW9uQ2VsbCA9IGNhcHRpb25Sb3cuYXBwZW5kQ2hpbGQocGFyZW50RG9jLmNyZWF0ZUVsZW1lbnQoJ3RkJykpOwoJCWNhcHRpb25DZWxsLnN0eWxlLnBhZGRpbmcgPSAnMHB4JzsKCQl2YXIgY2FwdGlvbiA9IGNhcHRpb25DZWxsLmFwcGVuZENoaWxkKHBhcmVudERvYy5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CgkJY2FwdGlvbi5jbGFzc05hbWUgPSAnY2FwdGlvbic7CgkJaWYgKGRvbUxpYl9pc0lFNTApCgkJewoJCQljYXB0aW9uLnN0eWxlLmhlaWdodCA9ICcxMDAlJzsKCQl9CgoJCWlmIChpbl9vcHRpb25zLmdldCgnY2FwdGlvbicpLm5vZGVUeXBlKQoJCXsKCQkJY2FwdGlvbi5hcHBlbmRDaGlsZChpbl9vcHRpb25zLmdldCgnY2FwdGlvbicpLmNsb25lTm9kZSgxKSk7CgkJfQoJCWVsc2UKCQl7CgkJCWNhcHRpb24uaW5uZXJIVE1MID0gaW5fb3B0aW9ucy5nZXQoJ2NhcHRpb24nKTsKCQl9CgoJCWlmIChpbl9vcHRpb25zLmdldCgndHlwZScpID09ICdzdGlja3knKQoJCXsKCQkJdmFyIG51bUNhcHRpb25DZWxscyA9IDI7CgkJCXZhciBjbG9zZUxpbmtDZWxsID0gY2FwdGlvblJvdy5hcHBlbmRDaGlsZChwYXJlbnREb2MuY3JlYXRlRWxlbWVudCgndGQnKSk7CgkJCWNsb3NlTGlua0NlbGwuc3R5bGUucGFkZGluZyA9ICcwcHgnOwoJCQl2YXIgY2xvc2VMaW5rID0gY2xvc2VMaW5rQ2VsbC5hcHBlbmRDaGlsZChwYXJlbnREb2MuY3JlYXRlRWxlbWVudCgnZGl2JykpOwoJCQljbG9zZUxpbmsuY2xhc3NOYW1lID0gJ2NhcHRpb24nOwoJCQlpZiAoZG9tTGliX2lzSUU1MCkKCQkJewoJCQkJY2xvc2VMaW5rLnN0eWxlLmhlaWdodCA9ICcxMDAlJzsKCQkJfQoKCQkJY2xvc2VMaW5rLnN0eWxlLnRleHRBbGlnbiA9ICdyaWdodCc7CgkJCWNsb3NlTGluay5zdHlsZS5jdXJzb3IgPSBkb21MaWJfc3R5bGVQb2ludGVyOwoJCQkvLyBtZXJnZSB0aGUgc3R5bGVzIG9mIHRoZSB0d28gY2VsbHMKCQkJY2xvc2VMaW5rLnN0eWxlLmJvcmRlckxlZnRXaWR0aCA9IGNhcHRpb24uc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCA9ICcwcHgnOwoJCQljbG9zZUxpbmsuc3R5bGUucGFkZGluZ0xlZnQgPSBjYXB0aW9uLnN0eWxlLnBhZGRpbmdSaWdodCA9ICcwcHgnOwoJCQljbG9zZUxpbmsuc3R5bGUubWFyZ2luTGVmdCA9IGNhcHRpb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnMHB4JzsKCQkJaWYgKGluX29wdGlvbnMuZ2V0KCdjbG9zZUxpbmsnKS5ub2RlVHlwZSkKCQkJewoJCQkJY2xvc2VMaW5rLmFwcGVuZENoaWxkKGluX29wdGlvbnMuZ2V0KCdjbG9zZUxpbmsnKS5jbG9uZU5vZGUoMSkpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJY2xvc2VMaW5rLmlubmVySFRNTCA9IGluX29wdGlvbnMuZ2V0KCdjbG9zZUxpbmsnKTsKCQkJfQoKCQkJY2xvc2VMaW5rLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgZG9tVFRfZGVhY3RpdmF0ZSh0aXBPd25lci5pZCk7IH07CgkJCWNsb3NlTGluay5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKGluX2V2ZW50KSB7IGlmICh0eXBlb2YoaW5fZXZlbnQpID09ICd1bmRlZmluZWQnKSB7IGluX2V2ZW50ID0gZXZlbnQ7IH0gaW5fZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsgfTsKCQkJLy8gTWFjSUUgaGFzIHRvIGhhdmUgYSBuZXdsaW5lIGF0IHRoZSBlbmQgYW5kIG11c3QgYmUgbWFkZSB3aXRoIGNyZWF0ZVRleHROb2RlKCkKCQkJaWYgKGRvbUxpYl9pc01hY0lFKQoJCQl7CgkJCQljbG9zZUxpbmtDZWxsLmFwcGVuZENoaWxkKHBhcmVudERvYy5jcmVhdGVUZXh0Tm9kZSgiXG4iKSk7CgkJCX0KCQl9CgoJCS8vIE1hY0lFIGhhcyB0byBoYXZlIGEgbmV3bGluZSBhdCB0aGUgZW5kIGFuZCBtdXN0IGJlIG1hZGUgd2l0aCBjcmVhdGVUZXh0Tm9kZSgpCgkJaWYgKGRvbUxpYl9pc01hY0lFKQoJCXsKCQkJY2FwdGlvbkNlbGwuYXBwZW5kQ2hpbGQocGFyZW50RG9jLmNyZWF0ZVRleHROb2RlKCJcbiIpKTsKCQl9CgoJCXZhciBjb250ZW50Um93ID0gdGlwTGF5b3V0VGJvZHkuYXBwZW5kQ2hpbGQocGFyZW50RG9jLmNyZWF0ZUVsZW1lbnQoJ3RyJykpOwoJCXZhciBjb250ZW50Q2VsbCA9IGNvbnRlbnRSb3cuYXBwZW5kQ2hpbGQocGFyZW50RG9jLmNyZWF0ZUVsZW1lbnQoJ3RkJykpOwoJCWNvbnRlbnRDZWxsLnN0eWxlLnBhZGRpbmcgPSAnMHB4JzsKCQlpZiAobnVtQ2FwdGlvbkNlbGxzKQoJCXsKCQkJaWYgKGRvbUxpYl9pc0lFIHx8IGRvbUxpYl9pc09wZXJhKQoJCQl7CgkJCQljb250ZW50Q2VsbC5jb2xTcGFuID0gbnVtQ2FwdGlvbkNlbGxzOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJY29udGVudENlbGwuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgbnVtQ2FwdGlvbkNlbGxzKTsKCQkJfQoJCX0KCgkJY29udGVudCA9IGNvbnRlbnRDZWxsLmFwcGVuZENoaWxkKHBhcmVudERvYy5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CgkJaWYgKGRvbUxpYl9pc0lFNTApCgkJewoJCQljb250ZW50LnN0eWxlLmhlaWdodCA9ICcxMDAlJzsKCQl9Cgl9CgllbHNlCgl7CgkJY29udGVudCA9IHRpcE9iai5hcHBlbmRDaGlsZChwYXJlbnREb2MuY3JlYXRlRWxlbWVudCgnZGl2JykpOwoJfQoKCWNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnRzJzsKCglpZiAoaW5fb3B0aW9ucy5nZXQoJ2NvbnRlbnQnKS5ub2RlVHlwZSkKCXsKCQljb250ZW50LmFwcGVuZENoaWxkKGluX29wdGlvbnMuZ2V0KCdjb250ZW50JykuY2xvbmVOb2RlKDEpKTsKCX0KCWVsc2UKCXsKCQljb250ZW50LmlubmVySFRNTCA9IGluX29wdGlvbnMuZ2V0KCdjb250ZW50Jyk7Cgl9CgoJLy8gYWRqdXN0IHRoZSB3aWR0aCBpZiBzcGVjaWZpZWQKCWlmIChpbl9vcHRpb25zLmhhcygnd2lkdGgnKSkKCXsKCQl0aXBPYmouc3R5bGUud2lkdGggPSBwYXJzZUludChpbl9vcHRpb25zLmdldCgnd2lkdGgnKSkgKyAncHgnOwoJfQoKCS8vIGNoZWNrIGlmIHdlIGFyZSBvdmVycmlkZGluZyB0aGUgbWF4V2lkdGgKCS8vIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIG1heFdpZHRoLCB0aGUgZ2xvYmFsIHNldHRpbmcgd2lsbCBiZSBpZ25vcmVkIChhc3N1bWUgc3R5bGVzaGVldCkKCXZhciBtYXhXaWR0aCA9IGRvbVRUX21heFdpZHRoOwoJaWYgKGluX29wdGlvbnMuaGFzKCdtYXhXaWR0aCcpKQoJewoJCWlmICgobWF4V2lkdGggPSBpbl9vcHRpb25zLmdldCgnbWF4V2lkdGgnKSkgPT09IGZhbHNlKQoJCXsKCQkJdGlwT2JqLnN0eWxlLm1heFdpZHRoID0gZG9tTGliX3N0eWxlTm9NYXhXaWR0aDsKCQl9CgkJZWxzZQoJCXsKCQkJbWF4V2lkdGggPSBwYXJzZUludChpbl9vcHRpb25zLmdldCgnbWF4V2lkdGgnKSk7CgkJCXRpcE9iai5zdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoICsgJ3B4JzsKCQl9Cgl9CgoJLy8gSEFDSzogZml4IGxhY2sgb2YgbWF4V2lkdGggaW4gQ1NTIGZvciBLSFRNTCBhbmQgSUUKCWlmIChtYXhXaWR0aCAhPT0gZmFsc2UgJiYgKGRvbUxpYl9pc0lFIHx8IGRvbUxpYl9pc0tIVE1MKSAmJiB0aXBPYmoub2Zmc2V0V2lkdGggPiBtYXhXaWR0aCkKCXsKCQl0aXBPYmouc3R5bGUud2lkdGggPSBtYXhXaWR0aCArICdweCc7Cgl9CgoJaW5fb3B0aW9ucy5zZXQoJ29mZnNldFdpZHRoJywgdGlwT2JqLm9mZnNldFdpZHRoKTsKCWluX29wdGlvbnMuc2V0KCdvZmZzZXRIZWlnaHQnLCB0aXBPYmoub2Zmc2V0SGVpZ2h0KTsKCgkvLyBrb25xdWVyb3IgbWlzY2FsY3VhdGVzIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBkaXYgd2hlbiB1c2luZyB0aGUgbGF5b3V0IHRhYmxlIGJhc2VkIG9uIHRoZQoJLy8gYm9yZGVyIHNpemUgb2YgdGhlIGNvbnRhaW5pbmcgZGl2CglpZiAoZG9tTGliX2lzS29ucSAmJiB0YWJsZUxheW91dCAmJiAhdGlwT2JqLnN0eWxlLndpZHRoKQoJewoJCXZhciBsZWZ0ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aXBPYmosICcnKS5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItbGVmdC13aWR0aCcpOwoJCXZhciByaWdodCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGlwT2JqLCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7CgkJCgkJbGVmdCA9IGxlZnQuc3Vic3RyaW5nKGxlZnQuaW5kZXhPZignOicpICsgMiwgbGVmdC5pbmRleE9mKCc7JykpOwoJCXJpZ2h0ID0gcmlnaHQuc3Vic3RyaW5nKHJpZ2h0LmluZGV4T2YoJzonKSArIDIsIHJpZ2h0LmluZGV4T2YoJzsnKSk7CgkJdmFyIGNvcnJlY3Rpb24gPSAyICogKChsZWZ0ID8gcGFyc2VJbnQobGVmdCkgOiAwKSArIChyaWdodCA/IHBhcnNlSW50KHJpZ2h0KSA6IDApKTsKCQl0aXBPYmouc3R5bGUud2lkdGggPSAodGlwT2JqLm9mZnNldFdpZHRoIC0gY29ycmVjdGlvbikgKyAncHgnOwoJfQoKCS8vIGlmIGEgd2lkdGggaXMgbm90IHNldCBvbiBhbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgb2JqZWN0LCBib3RoIElFIGFuZCBPcGVyYQoJLy8gd2lsbCBhdHRlbXB0IHRvIHdyYXAgd2hlbiBpdCBzcGlsbHMgb3V0c2lkZSBvZiBib2R5Li4ud2UgY2Fubm90IGhhdmUgdGhhdAoJaWYgKGRvbUxpYl9pc0lFIHx8IGRvbUxpYl9pc09wZXJhKQoJewoJCWlmICghdGlwT2JqLnN0eWxlLndpZHRoKQoJCXsKCQkJLy8gSEFDSzogdGhlIGNvcnJlY3Rpb24gaGVyZSBpcyBmb3IgYSBib3JkZXIKCQkJdGlwT2JqLnN0eWxlLndpZHRoID0gKHRpcE9iai5vZmZzZXRXaWR0aCAtIDIpICsgJ3B4JzsKCQl9CgoJCS8vIEhBQ0s6IHRoZSBjb3JyZWN0aW9uIGhlcmUgaXMgZm9yIGEgYm9yZGVyCgkJdGlwT2JqLnN0eWxlLmhlaWdodCA9ICh0aXBPYmoub2Zmc2V0SGVpZ2h0IC0gMikgKyAncHgnOwoJfQoKCS8vIHN0b3JlIHBsYWNlbWVudCBvZmZzZXRzIGZyb20gZXZlbnQgcG9zaXRpb24KCXZhciBvZmZzZXRYLCBvZmZzZXRZOwoKCS8vIHRvb2x0aXAgZmxvYXRzCglpZiAoaW5fb3B0aW9ucy5nZXQoJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJyAmJiAhKGluX29wdGlvbnMuaGFzKCd4JykgJiYgaW5fb3B0aW9ucy5oYXMoJ3knKSkpCgl7CgkJLy8gZGV0ZXJtaW5lIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIHBvaW50ZXIKCQlzd2l0Y2ggKGluX29wdGlvbnMuZ2V0KCdkaXJlY3Rpb24nKSkKCQl7CgkJCWNhc2UgJ25vcnRoZWFzdCc6CgkJCQlvZmZzZXRYID0gaW5fb3B0aW9ucy5nZXQoJ29mZnNldFgnKTsKCQkJCW9mZnNldFkgPSAwIC0gdGlwT2JqLm9mZnNldEhlaWdodCAtIGluX29wdGlvbnMuZ2V0KCdvZmZzZXRZJyk7CgkJCWJyZWFrOwoJCQljYXNlICdub3J0aHdlc3QnOgoJCQkJb2Zmc2V0WCA9IDAgLSB0aXBPYmoub2Zmc2V0V2lkdGggLSBpbl9vcHRpb25zLmdldCgnb2Zmc2V0WCcpOwoJCQkJb2Zmc2V0WSA9IDAgLSB0aXBPYmoub2Zmc2V0SGVpZ2h0IC0gaW5fb3B0aW9ucy5nZXQoJ29mZnNldFknKTsKCQkJYnJlYWs7CgkJCWNhc2UgJ25vcnRoJzoKCQkJCW9mZnNldFggPSAwIC0gcGFyc2VJbnQodGlwT2JqLm9mZnNldFdpZHRoLzIpOwoJCQkJb2Zmc2V0WSA9IDAgLSB0aXBPYmoub2Zmc2V0SGVpZ2h0IC0gaW5fb3B0aW9ucy5nZXQoJ29mZnNldFknKTsKCQkJYnJlYWs7CgkJCWNhc2UgJ3NvdXRod2VzdCc6CgkJCQlvZmZzZXRYID0gMCAtIHRpcE9iai5vZmZzZXRXaWR0aCAtIGluX29wdGlvbnMuZ2V0KCdvZmZzZXRYJyk7CgkJCQlvZmZzZXRZID0gaW5fb3B0aW9ucy5nZXQoJ29mZnNldFknKTsKCQkJYnJlYWs7CgkJCWNhc2UgJ3NvdXRoZWFzdCc6CgkJCQlvZmZzZXRYID0gaW5fb3B0aW9ucy5nZXQoJ29mZnNldFgnKTsKCQkJCW9mZnNldFkgPSBpbl9vcHRpb25zLmdldCgnb2Zmc2V0WScpOwoJCQlicmVhazsKCQkJY2FzZSAnc291dGgnOgoJCQkJb2Zmc2V0WCA9IDAgLSBwYXJzZUludCh0aXBPYmoub2Zmc2V0V2lkdGgvMik7CgkJCQlvZmZzZXRZID0gaW5fb3B0aW9ucy5nZXQoJ29mZnNldFknKTsKCQkJYnJlYWs7CgkJfQoKCQkvLyBpZiB3ZSBhcmUgaW4gYW4gaWZyYW1lLCBnZXQgdGhlIG9mZnNldHMgb2YgdGhlIGlmcmFtZSBpbiB0aGUgcGFyZW50IGRvY3VtZW50CgkJaWYgKGluX29wdGlvbnMuZ2V0KCdpbmZyYW1lJykpCgkJewoJCQl2YXIgaWZyYW1lT2JqID0gZG9tTGliX2dldElGcmFtZVJlZmVyZW5jZSh3aW5kb3cpOwoJCQlpZiAoaWZyYW1lT2JqKQoJCQl7CgkJCQl2YXIgZnJhbWVPZmZzZXRzID0gZG9tTGliX2dldE9mZnNldHMoaWZyYW1lT2JqKTsKCQkJCW9mZnNldFggKz0gZnJhbWVPZmZzZXRzLmdldCgnbGVmdCcpOwoJCQkJb2Zmc2V0WSArPSBmcmFtZU9mZnNldHMuZ2V0KCd0b3AnKTsKCQkJfQoJCX0KCX0KCS8vIHRvb2x0aXAgaXMgZml4ZWQKCWVsc2UKCXsKCQlvZmZzZXRYID0gMDsKCQlvZmZzZXRZID0gMDsKCQlpbl9vcHRpb25zLnNldCgndHJhaWwnLCBmYWxzZSk7Cgl9CgoJLy8gc2V0IHRoZSBkaXJlY3Rpb24tc3BlY2lmaWMgb2Zmc2V0WC9ZCglpbl9vcHRpb25zLnNldCgnb2Zmc2V0WCcsIG9mZnNldFgpOwoJaW5fb3B0aW9ucy5zZXQoJ29mZnNldFknLCBvZmZzZXRZKTsKCWlmIChpbl9vcHRpb25zLmdldCgnY2xlYXJNb3VzZScpICYmIGluX29wdGlvbnMuZ2V0KCdkaXJlY3Rpb24nKS5pbmRleE9mKCdzb3V0aCcpICE9IC0xKQoJewoJCWluX29wdGlvbnMuc2V0KCdtb3VzZU9mZnNldCcsIGRvbVRUX21vdXNlSGVpZ2h0KTsKCX0KCWVsc2UKCXsKCQlpbl9vcHRpb25zLnNldCgnbW91c2VPZmZzZXQnLCAwKTsKCX0KCglpZiAoZG9tTGliX2NhbkZhZGUgJiYgdHlwZW9mKEZhZG9tYXRpYykgPT0gJ2Z1bmN0aW9uJykKCXsKCQlpZiAoaW5fb3B0aW9ucy5nZXQoJ2ZhZGUnKSAhPSAnbmVpdGhlcicpCgkJewoJCQl2YXIgZmFkZUhhbmRsZXIgPSBuZXcgRmFkb21hdGljKHRpcE9iaiwgMTAsIDAsIDAsIGluX29wdGlvbnMuZ2V0KCdmYWRlTWF4JykpOwoJCQlpbl9vcHRpb25zLnNldCgnZmFkZUhhbmRsZXInLCBmYWRlSGFuZGxlcik7CgkJfQoJfQoJZWxzZQoJewoJCWluX29wdGlvbnMuc2V0KCdmYWRlJywgJ25laXRoZXInKTsKCX0KCgkvLyBzZXR1cCBtb3VzZSBldmVudHMKCWlmIChpbl9vcHRpb25zLmdldCgndHJhaWwnKSAmJiB0eXBlb2YodGlwT3duZXIub25tb3VzZW1vdmUpICE9ICdmdW5jdGlvbicpCgl7CgkJdGlwT3duZXIub25tb3VzZW1vdmUgPSBmdW5jdGlvbihpbl9ldmVudCkgeyBkb21UVF9tb3VzZW1vdmUodGhpcywgaW5fZXZlbnQpOyB9OwoJfQoKCWlmICh0eXBlb2YodGlwT3duZXIub25tb3VzZW91dCkgIT0gJ2Z1bmN0aW9uJykKCXsKCQl0aXBPd25lci5vbm1vdXNlb3V0ID0gZnVuY3Rpb24oaW5fZXZlbnQpIHsgZG9tVFRfbW91c2VvdXQodGhpcywgaW5fZXZlbnQpOyB9OwoJfQoKCWlmIChpbl9vcHRpb25zLmdldCgndHlwZScpID09ICdzdGlja3knKQoJewoJCWlmIChpbl9vcHRpb25zLmdldCgncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnICYmIGRvbVRUX2RyYWdFbmFibGVkICYmIGluX29wdGlvbnMuZ2V0KCdkcmFnZ2FibGUnKSkKCQl7CgkJCWlmIChkb21MaWJfaXNJRSkKCQkJewoJCQkJY2FwdGlvblJvdy5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfTsKCQkJfQoKCQkJLy8gc2V0dXAgZHJhZwoJCQljYXB0aW9uUm93Lm9ubW91c2Vkb3duID0gZnVuY3Rpb24oaW5fZXZlbnQpIHsgZG9tVFRfZHJhZ1N0YXJ0KHRpcE9iaiwgaW5fZXZlbnQpOyAgfTsKCQkJY2FwdGlvblJvdy5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGluX2V2ZW50KSB7IGRvbVRUX2RyYWdVcGRhdGUoaW5fZXZlbnQpOyB9OwoJCQljYXB0aW9uUm93Lm9ubW91c2V1cCA9IGZ1bmN0aW9uKCkgeyBkb21UVF9kcmFnU3RvcCgpOyB9OwoJCX0KCX0KCWVsc2UgaWYgKGluX29wdGlvbnMuZ2V0KCd0eXBlJykgPT0gJ3ZlbGNybycpCgl7CgkJdGlwT2JqLm9ubW91c2VvdXQgPSBmdW5jdGlvbihpbl9ldmVudCkgeyBpZiAodHlwZW9mKGluX2V2ZW50KSA9PSAndW5kZWZpbmVkJykgeyBpbl9ldmVudCA9IGV2ZW50OyB9IGlmICghZG9tTGliX2lzRGVzY2VuZGFudE9mKGluX2V2ZW50W2RvbUxpYl9ldmVudFRvXSwgdGlwT2JqKSkgeyBkb21UVF9kZWFjdGl2YXRlKHRpcE93bmVyLmlkKTsgfX07Cgl9CgoJaWYgKGluX29wdGlvbnMuZ2V0KCdwb3NpdGlvbicpID09ICdyZWxhdGl2ZScpCgl7CgkJdGlwT2JqLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKCX0KCglpbl9vcHRpb25zLnNldCgnbm9kZScsIHRpcE9iaik7Cglpbl9vcHRpb25zLnNldCgnc3RhdHVzJywgJ2luYWN0aXZlJyk7Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfc2hvdygpCgovLyBpbl9pZCBpcyBlaXRoZXIgdGlwIGlkIG9yIHRoZSBvd25lciBpZApmdW5jdGlvbiBkb21UVF9zaG93KGluX2lkLCBpbl9ldmVudCkKewoJLy8gc2hvdWxkIGFsd2F5cyBmaW5kIG9uZSBzaW5jZSB0aGlzIGNhbGwgd291bGQgYmUgY2FuY2VsbGVkIGlmIHRpcCB3YXMga2lsbGVkCgl2YXIgdG9vbHRpcCA9IGRvbVRUX3Rvb2x0aXBzLmdldChpbl9pZCk7Cgl2YXIgc3RhdHVzID0gdG9vbHRpcC5nZXQoJ3N0YXR1cycpOwoJdmFyIHRpcE9iaiA9IHRvb2x0aXAuZ2V0KCdub2RlJyk7CgoJaWYgKHRvb2x0aXAuZ2V0KCdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpCgl7CgkJdmFyIG1vdXNlWCwgbW91c2VZOwoKCQlpZiAodG9vbHRpcC5oYXMoJ3gnKSAmJiB0b29sdGlwLmhhcygneScpKQoJCXsKCQkJbW91c2VYID0gdG9vbHRpcC5nZXQoJ3gnKTsKCQkJbW91c2VZID0gdG9vbHRpcC5nZXQoJ3knKTsKCQl9CgkJZWxzZSBpZiAoIWRvbVRUX3VzZUdsb2JhbE1vdXNlUG9zaXRpb24gfHwgc3RhdHVzID09ICdhY3RpdmUnIHx8IHRvb2x0aXAuZ2V0KCdkZWxheScpID09IDApCgkJewoJCQl2YXIgZXZlbnRQb3NpdGlvbiA9IGRvbUxpYl9nZXRFdmVudFBvc2l0aW9uKGluX2V2ZW50KTsKCQkJdmFyIGV2ZW50WCA9IGV2ZW50UG9zaXRpb24uZ2V0KCd4Jyk7CgkJCXZhciBldmVudFkgPSBldmVudFBvc2l0aW9uLmdldCgneScpOwoJCQlpZiAodG9vbHRpcC5nZXQoJ2luZnJhbWUnKSkKCQkJewoJCQkJZXZlbnRYIC09IGV2ZW50UG9zaXRpb24uZ2V0KCdzY3JvbGxYJyk7CgkJCQlldmVudFkgLT0gZXZlbnRQb3NpdGlvbi5nZXQoJ3Njcm9sbFknKTsKCQkJfQoKCQkJLy8gb25seSBtb3ZlIHRpcCBhbG9uZyByZXF1ZXN0ZWQgdHJhaWwgYXhpcyB3aGVuIHVwZGF0aW5nIHBvc2l0aW9uCgkJCWlmIChzdGF0dXMgPT0gJ2FjdGl2ZScgJiYgdG9vbHRpcC5nZXQoJ3RyYWlsJykgIT09IHRydWUpCgkJCXsKCQkJCXZhciB0cmFpbCA9IHRvb2x0aXAuZ2V0KCd0cmFpbCcpOwoJCQkJaWYgKHRyYWlsID09ICd4JykKCQkJCXsKCQkJCQltb3VzZVggPSBldmVudFg7CgkJCQkJbW91c2VZID0gdG9vbHRpcC5nZXQoJ21vdXNlWScpOwoJCQkJfQoJCQkJZWxzZSBpZiAodHJhaWwgPT0gJ3knKQoJCQkJewoJCQkJCW1vdXNlWCA9IHRvb2x0aXAuZ2V0KCdtb3VzZVgnKTsKCQkJCQltb3VzZVkgPSBldmVudFk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQltb3VzZVggPSBldmVudFg7CgkJCQltb3VzZVkgPSBldmVudFk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJbW91c2VYID0gZG9tVFRfbW91c2VQb3NpdGlvbi5nZXQoJ3gnKTsKCQkJbW91c2VZID0gZG9tVFRfbW91c2VQb3NpdGlvbi5nZXQoJ3knKTsKCQkJaWYgKHRvb2x0aXAuZ2V0KCdpbmZyYW1lJykpCgkJCXsKCQkJCW1vdXNlWCAtPSBkb21UVF9tb3VzZVBvc2l0aW9uLmdldCgnc2Nyb2xsWCcpOwoJCQkJbW91c2VZIC09IGRvbVRUX21vdXNlUG9zaXRpb24uZ2V0KCdzY3JvbGxZJyk7CgkJCX0KCQl9CgoJCS8vIHdlIGFyZSB1c2luZyBhIGdyaWQgZm9yIHVwZGF0ZXMKCQlpZiAodG9vbHRpcC5nZXQoJ2dyaWQnKSkKCQl7CgkJCS8vIGlmIHRoaXMgaXMgbm90IGEgbW91c2Vtb3ZlIGV2ZW50IG9yIGl0IGlzIGEgbW91c2Vtb3ZlIGV2ZW50IG9uIGFuIGFjdGl2ZSB0aXAgYW5kCgkJCS8vIHRoZSBtb3ZlbWVudCBpcyBiaWdnZXIgdGhhbiB0aGUgZ3JpZAoJCQlpZiAoaW5fZXZlbnQudHlwZSAhPSAnbW91c2Vtb3ZlJyB8fCAoc3RhdHVzID09ICdhY3RpdmUnICYmIChNYXRoLmFicyh0b29sdGlwLmdldCgnbGFzdFgnKSAtIG1vdXNlWCkgPiB0b29sdGlwLmdldCgnZ3JpZCcpIHx8IE1hdGguYWJzKHRvb2x0aXAuZ2V0KCdsYXN0WScpIC0gbW91c2VZKSA+IHRvb2x0aXAuZ2V0KCdncmlkJykpKSkKCQkJewoJCQkJdG9vbHRpcC5zZXQoJ2xhc3RYJywgbW91c2VYKTsKCQkJCXRvb2x0aXAuc2V0KCdsYXN0WScsIG1vdXNlWSk7CgkJCX0KCQkJLy8gZGlkIG5vdCBzYXRpc2Z5IHRoZSBncmlkIG1vdmVtZW50IHJlcXVpcmVtZW50CgkJCWVsc2UKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoKCQkvLyBtb3VzZVggYW5kIG1vdXNlWSBzdG9yZSB0aGUgbGFzdCBhY2tub3dsZWdlZCBtb3VzZSBwb3NpdGlvbiwKCQkvLyBnb29kIGZvciB0cmFpbGluZyBvbiBvbmUgYXhpcwoJCXRvb2x0aXAuc2V0KCdtb3VzZVgnLCBtb3VzZVgpOwoJCXRvb2x0aXAuc2V0KCdtb3VzZVknLCBtb3VzZVkpOwoKCQl2YXIgY29vcmRpbmF0ZXM7CgkJaWYgKGRvbVRUX3NjcmVlbkVkZ2VEZXRlY3Rpb24pCgkJewoJCQljb29yZGluYXRlcyA9IGRvbVRUX2NvcnJlY3RFZGdlQmxlZWQoCgkJCQl0b29sdGlwLmdldCgnb2Zmc2V0V2lkdGgnKSwKCQkJCXRvb2x0aXAuZ2V0KCdvZmZzZXRIZWlnaHQnKSwKCQkJCW1vdXNlWCwKCQkJCW1vdXNlWSwKCQkJCXRvb2x0aXAuZ2V0KCdvZmZzZXRYJyksCgkJCQl0b29sdGlwLmdldCgnb2Zmc2V0WScpLAoJCQkJdG9vbHRpcC5nZXQoJ21vdXNlT2Zmc2V0JyksCgkJCQl0b29sdGlwLmdldCgnaW5mcmFtZScpID8gd2luZG93LnBhcmVudCA6IHdpbmRvdwoJCQkpOwoJCX0KCQllbHNlCgkJewoJCQljb29yZGluYXRlcyA9IHsKCQkJCSd4JyA6IG1vdXNlWCArIHRvb2x0aXAuZ2V0KCdvZmZzZXRYJyksCgkJCQkneScgOiBtb3VzZVkgKyB0b29sdGlwLmdldCgnb2Zmc2V0WScpICsgdG9vbHRpcC5nZXQoJ21vdXNlT2Zmc2V0JykKCQkJfTsKCQl9CgoJCS8vIHVwZGF0ZSB0aGUgcG9zaXRpb24KCQl0aXBPYmouc3R5bGUubGVmdCA9IGNvb3JkaW5hdGVzLnggKyAncHgnOwoJCXRpcE9iai5zdHlsZS50b3AgPSBjb29yZGluYXRlcy55ICsgJ3B4JzsKCgkJLy8gaW5jcmVhc2UgdGhlIHRpcCB6SW5kZXggc28gaXQgZ29lcyBvdmVyIHByZXZpb3VzbHkgc2hvd24gdGlwcwoJCXRpcE9iai5zdHlsZS56SW5kZXggPSBkb21MaWJfekluZGV4Kys7Cgl9CgoJLy8gaWYgdGlwIGlzIG5vdCBhY3RpdmUsIGFjdGl2ZSBpdCBub3cgYW5kIGNoZWNrIGZvciBhIGZhZGUgaW4KCWlmIChzdGF0dXMgPT0gJ3BlbmRpbmcnKQoJewoJCS8vIHVuaGlkZSB0aGUgdG9vbHRpcAoJCXRvb2x0aXAuc2V0KCdzdGF0dXMnLCAnYWN0aXZlJyk7CgkJdGlwT2JqLnN0eWxlLmRpc3BsYXkgPSAnJzsKCQl0aXBPYmouc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKCgkJdmFyIGZhZGUgPSB0b29sdGlwLmdldCgnZmFkZScpOwoJCWlmIChmYWRlICE9ICduZWl0aGVyJykKCQl7CgkJCXZhciBmYWRlSGFuZGxlciA9IHRvb2x0aXAuZ2V0KCdmYWRlSGFuZGxlcicpOwoJCQlpZiAoZmFkZSA9PSAnb3V0JyB8fCBmYWRlID09ICdib3RoJykKCQkJewoJCQkJZmFkZUhhbmRsZXIuaGFsdEZhZGUoKTsKCQkJCWlmIChmYWRlID09ICdvdXQnKQoJCQkJewoJCQkJCWZhZGVIYW5kbGVyLmhhbHQoKTsKCQkJCX0KCQkJfQoKCQkJaWYgKGZhZGUgPT0gJ2luJyB8fCBmYWRlID09ICdib3RoJykKCQkJewoJCQkJZmFkZUhhbmRsZXIuZmFkZUluKCk7CgkJCX0KCQl9CgoJCWlmICh0b29sdGlwLmdldCgndHlwZScpID09ICdncmVhc3knICYmIHRvb2x0aXAuZ2V0KCdsaWZldGltZScpICE9IDApCgkJewoJCQl0b29sdGlwLnNldCgnbGlmZXRpbWVUaW1lb3V0JywgZG9tTGliX3NldFRpbWVvdXQoZG9tVFRfcnVuRGVhY3RpdmF0ZSwgdG9vbHRpcC5nZXQoJ2xpZmV0aW1lJyksIFt0aXBPYmouaWRdKSk7CgkJfQoJfQoKCWlmICh0b29sdGlwLmdldCgncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKQoJewoJCWRvbUxpYl9kZXRlY3RDb2xsaXNpb25zKHRpcE9iaik7Cgl9Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfY2xvc2UoKQoKLy8gaW5faGFuZGxlIGNhbiBlaXRoZXIgYmUgYW4gY2hpbGQgb2JqZWN0IG9mIHRoZSB0aXAsIHRoZSB0aXAgaWQgb3IgdGhlIG93bmVyIGlkCmZ1bmN0aW9uIGRvbVRUX2Nsb3NlKGluX2hhbmRsZSkKewoJdmFyIGlkOwoJaWYgKHR5cGVvZihpbl9oYW5kbGUpID09ICdvYmplY3QnICYmIGluX2hhbmRsZS5ub2RlVHlwZSkKCXsKCQl2YXIgb2JqID0gaW5faGFuZGxlOwoJCXdoaWxlICghb2JqLmlkIHx8ICFkb21UVF90b29sdGlwcy5nZXQob2JqLmlkKSkKCQl7CgkJCW9iaiA9IG9iai5wYXJlbnROb2RlOwoJCgkJCWlmIChvYmoubm9kZVR5cGUgIT0gZG9jdW1lbnQuRUxFTUVOVF9OT0RFKSB7IHJldHVybjsgfQoJCX0KCgkJaWQgPSBvYmouaWQ7Cgl9CgllbHNlCgl7CgkJaWQgPSBpbl9oYW5kbGU7Cgl9CgoJZG9tVFRfZGVhY3RpdmF0ZShpZCk7Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfZGVhY3RpdmF0ZSgpCgovLyBpbl9pZCBpcyBlaXRoZXIgdGhlIHRpcCBpZCBvciB0aGUgb3duZXIgaWQKZnVuY3Rpb24gZG9tVFRfZGVhY3RpdmF0ZShpbl9pZCkKewoJdmFyIHRvb2x0aXAgPSBkb21UVF90b29sdGlwcy5nZXQoaW5faWQpOwoJaWYgKHRvb2x0aXApCgl7CgkJdmFyIHN0YXR1cyA9IHRvb2x0aXAuZ2V0KCdzdGF0dXMnKTsKCQlpZiAoc3RhdHVzID09ICdwZW5kaW5nJykKCQl7CgkJCS8vIGNhbmNlbCB0aGUgY3JlYXRpb24gb2YgdGhpcyB0aXAgaWYgaXQgaXMgc3RpbGwgcGVuZGluZwoJCQlkb21MaWJfY2xlYXJUaW1lb3V0KHRvb2x0aXAuZ2V0KCdhY3RpdmF0ZVRpbWVvdXQnKSk7CgkJCXRvb2x0aXAuc2V0KCdzdGF0dXMnLCAnaW5hY3RpdmUnKTsKCQl9CgkJZWxzZSBpZiAoc3RhdHVzID09ICdhY3RpdmUnKQoJCXsKCQkJaWYgKHRvb2x0aXAuZ2V0KCdsaWZldGltZScpKQoJCQl7CgkJCQlkb21MaWJfY2xlYXJUaW1lb3V0KHRvb2x0aXAuZ2V0KCdsaWZldGltZVRpbWVvdXQnKSk7CgkJCX0KCgkJCXZhciB0aXBPYmogPSB0b29sdGlwLmdldCgnbm9kZScpOwoJCQlpZiAodG9vbHRpcC5nZXQoJ2Nsb3NlQWN0aW9uJykgPT0gJ2hpZGUnKQoJCQl7CgkJCQl2YXIgZmFkZSA9IHRvb2x0aXAuZ2V0KCdmYWRlJyk7CgkJCQlpZiAoZmFkZSAhPSAnbmVpdGhlcicpCgkJCQl7CgkJCQkJdmFyIGZhZGVIYW5kbGVyID0gdG9vbHRpcC5nZXQoJ2ZhZGVIYW5kbGVyJyk7CgkJCQkJaWYgKGZhZGUgPT0gJ291dCcgfHwgZmFkZSA9PSAnYm90aCcpCgkJCQkJewoJCQkJCQlmYWRlSGFuZGxlci5mYWRlT3V0KCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCWZhZGVIYW5kbGVyLmhpZGUoKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdGlwT2JqLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl0b29sdGlwLmdldCgncGFyZW50JykucmVtb3ZlQ2hpbGQodGlwT2JqKTsKCQkJCWRvbVRUX3Rvb2x0aXBzLnJlbW92ZSh0b29sdGlwLmdldCgnb3duZXInKS5pZCk7CgkJCQlkb21UVF90b29sdGlwcy5yZW1vdmUodG9vbHRpcC5nZXQoJ2lkJykpOwoJCQl9CgoJCQl0b29sdGlwLnNldCgnc3RhdHVzJywgJ2luYWN0aXZlJyk7CgkJCS8vIHVuaGlkZSBhbGwgb2YgdGhlIHNlbGVjdHMgdGhhdCBhcmUgb3duZWQgYnkgdGhpcyBvYmplY3QKCQkJZG9tTGliX2RldGVjdENvbGxpc2lvbnModGlwT2JqLCB0cnVlKTsgCgkJfQoJfQp9CgovLyB9fX0KLy8ge3t7IGRvbVRUX21vdXNlb3V0KCkKCmZ1bmN0aW9uIGRvbVRUX21vdXNlb3V0KGluX293bmVyLCBpbl9ldmVudCkKewoJaWYgKCFkb21MaWJfdXNlTGlicmFyeSkgeyByZXR1cm4gZmFsc2U7IH0KCglpZiAodHlwZW9mKGluX2V2ZW50KSA9PSAndW5kZWZpbmVkJykKCXsKCQlpbl9ldmVudCA9IGV2ZW50OwoJfQoKCXZhciB0b0NoaWxkID0gZG9tTGliX2lzRGVzY2VuZGFudE9mKGluX2V2ZW50W2RvbUxpYl9ldmVudFRvXSwgaW5fb3duZXIpOwoJdmFyIHRvb2x0aXAgPSBkb21UVF90b29sdGlwcy5nZXQoaW5fb3duZXIuaWQpOwoJaWYgKHRvb2x0aXAgJiYgKHRvb2x0aXAuZ2V0KCd0eXBlJykgPT0gJ2dyZWFzeScgfHwgdG9vbHRpcC5nZXQoJ3N0YXR1cycpICE9ICdhY3RpdmUnKSkKCXsKCQkvLyBkZWFjdGl2YXRlIHRpcCBpZiBleGlzdHMgYW5kIHdlIG1vdmVkIGF3YXkgZnJvbSB0aGUgb3duZXIKCQlpZiAoIXRvQ2hpbGQpCgkJewoJCQlkb21UVF9kZWFjdGl2YXRlKGluX293bmVyLmlkKTsKCQkJdHJ5IHsgd2luZG93LnN0YXR1cyA9IHdpbmRvdy5kZWZhdWx0U3RhdHVzOyB9IGNhdGNoKGUpIHt9CgkJfQoJfQoJZWxzZSBpZiAoIXRvQ2hpbGQpCgl7CgkJdHJ5IHsgd2luZG93LnN0YXR1cyA9IHdpbmRvdy5kZWZhdWx0U3RhdHVzOyB9IGNhdGNoKGUpIHt9Cgl9Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfbW91c2Vtb3ZlKCkKCmZ1bmN0aW9uIGRvbVRUX21vdXNlbW92ZShpbl9vd25lciwgaW5fZXZlbnQpCnsKCWlmICghZG9tTGliX3VzZUxpYnJhcnkpIHsgcmV0dXJuIGZhbHNlOyB9CgoJaWYgKHR5cGVvZihpbl9ldmVudCkgPT0gJ3VuZGVmaW5lZCcpCgl7CgkJaW5fZXZlbnQgPSBldmVudDsKCX0KCgl2YXIgdG9vbHRpcCA9IGRvbVRUX3Rvb2x0aXBzLmdldChpbl9vd25lci5pZCk7CglpZiAodG9vbHRpcCAmJiB0b29sdGlwLmdldCgndHJhaWwnKSAmJiB0b29sdGlwLmdldCgnc3RhdHVzJykgPT0gJ2FjdGl2ZScpCgl7CgkJLy8gc2VlIGlmIHdlIGFyZSB0cmFpbGluZyBsYXp5CgkJaWYgKHRvb2x0aXAuZ2V0KCdsYXp5JykpCgkJewoJCQlkb21MaWJfc2V0VGltZW91dChkb21UVF9ydW5TaG93LCBkb21UVF90cmFpbERlbGF5LCBbaW5fb3duZXIuaWQsIGluX2V2ZW50XSk7CgkJfQoJCWVsc2UKCQl7CgkJCWRvbVRUX3Nob3coaW5fb3duZXIuaWQsIGluX2V2ZW50KTsKCQl9Cgl9Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfYWRkUHJlZGVmaW5lZCgpCgpmdW5jdGlvbiBkb21UVF9hZGRQcmVkZWZpbmVkKGluX2lkKQp7Cgl2YXIgb3B0aW9ucyA9IG5ldyBIYXNoKCk7Cglmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMikKCXsKCQlvcHRpb25zLnNldChhcmd1bWVudHNbaV0sIGFyZ3VtZW50c1tpICsgMV0pOwoJfQoKCWRvbVRUX3ByZWRlZmluZWQuc2V0KGluX2lkLCBvcHRpb25zKTsKfQoKLy8gfX19Ci8vIHt7eyBkb21UVF9jb3JyZWN0RWRnZUJsZWVkKCkKCmZ1bmN0aW9uIGRvbVRUX2NvcnJlY3RFZGdlQmxlZWQoaW5fd2lkdGgsIGluX2hlaWdodCwgaW5feCwgaW5feSwgaW5fb2Zmc2V0WCwgaW5fb2Zmc2V0WSwgaW5fbW91c2VPZmZzZXQsIGluX3dpbmRvdykKewoJdmFyIHdpbiwgZG9jOwoJdmFyIGJsZWVkUmlnaHQsIGJsZWVkQm90dG9tOwoJdmFyIHBhZ2VIZWlnaHQsIHBhZ2VXaWR0aCwgcGFnZVlPZmZzZXQsIHBhZ2VYT2Zmc2V0OwoKCXZhciB4ID0gaW5feCArIGluX29mZnNldFg7Cgl2YXIgeSA9IGluX3kgKyBpbl9vZmZzZXRZICsgaW5fbW91c2VPZmZzZXQ7CgoJd2luID0gKHR5cGVvZihpbl93aW5kb3cpID09ICd1bmRlZmluZWQnID8gd2luZG93IDogaW5fd2luZG93KTsKCgkvLyBHZWNrbyBhbmQgSUUgc3dhcHMgdmFsdWVzIG9mIGNsaWVudEhlaWdodCwgY2xpZW50V2lkdGggcHJvcGVydGllcyB3aGVuCgkvLyBpbiBzdGFuZGFyZHMgY29tcGxpYW5jZSBtb2RlIGZyb20gZG9jdW1lbnRFbGVtZW50IHRvIGRvY3VtZW50LmJvZHkKCWRvYyA9ICgoZG9tTGliX3N0YW5kYXJkc01vZGUgJiYgKGRvbUxpYl9pc0lFIHx8IGRvbUxpYl9pc0dlY2tvKSkgPyB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogd2luLmRvY3VtZW50LmJvZHkpOwoKCS8vIGZvciBJRSBpbiBjb21wbGlhbmNlIG1vZGUKCWlmIChkb21MaWJfaXNJRSkKCXsKCQlwYWdlSGVpZ2h0ID0gZG9jLmNsaWVudEhlaWdodDsKCQlwYWdlV2lkdGggPSBkb2MuY2xpZW50V2lkdGg7CgkJcGFnZVlPZmZzZXQgPSBkb2Muc2Nyb2xsVG9wOwoJCXBhZ2VYT2Zmc2V0ID0gZG9jLnNjcm9sbExlZnQ7Cgl9CgllbHNlCgl7CgkJcGFnZUhlaWdodCA9IGRvYy5jbGllbnRIZWlnaHQ7CgkJcGFnZVdpZHRoID0gZG9jLmNsaWVudFdpZHRoOwoKCQlpZiAoZG9tTGliX2lzS0hUTUwpCgkJewoJCQlwYWdlSGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0OwoJCX0KCgkJcGFnZVlPZmZzZXQgPSB3aW4ucGFnZVlPZmZzZXQ7CgkJcGFnZVhPZmZzZXQgPSB3aW4ucGFnZVhPZmZzZXQ7Cgl9CgoJLy8gd2UgYXJlIGJsZWVkaW5nIG9mZiB0aGUgcmlnaHQsIG1vdmUgdGlwIG92ZXIgdG8gc3RheSBvbiBwYWdlCgkvLyBsb2dpYzogdGFrZSB4IHBvc2l0aW9uLCBhZGQgd2lkdGggYW5kIHN1YnRyYWN0IGZyb20gZWZmZWN0aXZlIHBhZ2Ugd2lkdGgKCWlmICgoYmxlZWRSaWdodCA9ICh4IC0gcGFnZVhPZmZzZXQpICsgaW5fd2lkdGggLSAocGFnZVdpZHRoIC0gZG9tVFRfc2NyZWVuRWRnZVBhZGRpbmcpKSA+IDApCgl7CgkJeCAtPSBibGVlZFJpZ2h0OwoJfQoKCS8vIHdlIGFyZSBibGVlZGluZyB0byB0aGUgbGVmdCwgbW92ZSB0aXAgb3ZlciB0byBzdGF5IG9uIHBhZ2UKCS8vIGlmIHRpcCBkb2Vzbid0IGZpdCwgd2Ugd2lsbCBnbyBiYWNrIHRvIGJsZWVkaW5nIG9mZiB0aGUgcmlnaHQKCS8vIGxvZ2ljOiB0YWtlIHggcG9zaXRpb24gYW5kIGNoZWNrIGlmIGxlc3MgdGhhbiBlZGdlIHBhZGRpbmcKCWlmICgoeCAtIHBhZ2VYT2Zmc2V0KSA8IGRvbVRUX3NjcmVlbkVkZ2VQYWRkaW5nKQoJewoJCXggPSBkb21UVF9zY3JlZW5FZGdlUGFkZGluZyArIHBhZ2VYT2Zmc2V0OwoJfQoKCS8vIGlmIHdlIGFyZSBibGVlZGluZyBvZmYgdGhlIGJvdHRvbSwgZmxpcCB0byBub3J0aAoJLy8gbG9naWM6IHRha2UgeSBwb3NpdGlvbiwgYWRkIGhlaWdodCBhbmQgc3VidHJhY3QgZnJvbSBlZmZlY3RpdmUgcGFnZSBoZWlnaHQKCWlmICgoYmxlZWRCb3R0b20gPSAoeSAtIHBhZ2VZT2Zmc2V0KSArIGluX2hlaWdodCAtIChwYWdlSGVpZ2h0IC0gZG9tVFRfc2NyZWVuRWRnZVBhZGRpbmcpKSA+IDApCgl7CgkJeSA9IGluX3kgLSBpbl9oZWlnaHQgLSBpbl9vZmZzZXRZOwoJfQoKCS8vIGlmIHdlIGFyZSBibGVlZGluZyBvZmYgdGhlIHRvcCwgZmxpcCB0byBzb3V0aAoJLy8gaWYgdGlwIGRvZXNuJ3QgZml0LCB3ZSB3aWxsIGdvIGJhY2sgdG8gYmxlZWRpbmcgb2ZmIHRoZSBib3R0b20KCS8vIGxvZ2ljOiB0YWtlIHkgcG9zaXRpb24gYW5kIGNoZWNrIGlmIGxlc3MgdGhhbiBlZGdlIHBhZGRpbmcKCWlmICgoeSAtIHBhZ2VZT2Zmc2V0KSA8IGRvbVRUX3NjcmVlbkVkZ2VQYWRkaW5nKQoJewoJCXkgPSBpbl95ICsgZG9tVFRfbW91c2VIZWlnaHQgKyBpbl9vZmZzZXRZOwoJfQoKCXJldHVybiB7J3gnIDogeCwgJ3knIDogeX07Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfaXNBY3RpdmUoKQoKLy8gaW5faWQgaXMgZWl0aGVyIHRoZSB0aXAgaWQgb3IgdGhlIG93bmVyIGlkCmZ1bmN0aW9uIGRvbVRUX2lzQWN0aXZlKGluX2lkKQp7Cgl2YXIgdG9vbHRpcCA9IGRvbVRUX3Rvb2x0aXBzLmdldChpbl9pZCk7CglpZiAoIXRvb2x0aXAgfHwgdG9vbHRpcC5nZXQoJ3N0YXR1cycpICE9ICdhY3RpdmUnKQoJewoJCXJldHVybiBmYWxzZTsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KfQoKLy8gfX19Ci8vIHt7eyBkb21UVF9ydW5YWFgoKQoKLy8gQWxsIG9mIHRoZXNlIGRvbU1lbnVfcnVuWFhYKCkgbWV0aG9kcyBhcmUgdXNlZCBieSB0aGUgZXZlbnQgaGFuZGxpbmcgc2VjdGlvbnMgdG8KLy8gYXZvaWQgdGhlIGNpcmN1bGFyIG1lbW9yeSBsZWFrcyBjYXVzZWQgYnkgaW5uZXIgZnVuY3Rpb25zCmZ1bmN0aW9uIGRvbVRUX3J1bkRlYWN0aXZhdGUoYXJncykgeyBkb21UVF9kZWFjdGl2YXRlKGFyZ3NbMF0pOyB9CmZ1bmN0aW9uIGRvbVRUX3J1blNob3coYXJncykgeyBkb21UVF9zaG93KGFyZ3NbMF0sIGFyZ3NbMV0pOyB9CgovLyB9fX0KLy8ge3t7IGRvbVRUX3JlcGxhY2VUaXRsZXMoKQoKZnVuY3Rpb24gZG9tVFRfcmVwbGFjZVRpdGxlcyhpbl9kZWNvcmF0b3IpCnsKCXZhciBlbGVtZW50cyA9IGRvbUxpYl9nZXRFbGVtZW50c0J5Q2xhc3MoJ3Rvb2x0aXAnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCgl7CgkJaWYgKGVsZW1lbnRzW2ldLnRpdGxlKQoJCXsKCQkJdmFyIGNvbnRlbnQ7CgkJCWlmICh0eXBlb2YoaW5fZGVjb3JhdG9yKSA9PSAnZnVuY3Rpb24nKQoJCQl7CgkJCQljb250ZW50ID0gaW5fZGVjb3JhdG9yKGVsZW1lbnRzW2ldKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWNvbnRlbnQgPSBlbGVtZW50c1tpXS50aXRsZTsKCQkJfQoKCQkJY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShuZXcgUmVnRXhwKCdcJycsICdnJyksICdcXFwnJyk7CgkJCWVsZW1lbnRzW2ldLm9ubW91c2VvdmVyID0gbmV3IEZ1bmN0aW9uKCdpbl9ldmVudCcsICJkb21UVF9hY3RpdmF0ZSh0aGlzLCBpbl9ldmVudCwgJ2NvbnRlbnQnLCAnIiArIGNvbnRlbnQgKyAiJykiKTsKCQkJZWxlbWVudHNbaV0udGl0bGUgPSAnJzsKCQl9Cgl9Cn0KCi8vIH19fQovLyB7e3sgZG9tVFRfdXBkYXRlKCkKCi8vIEFsbG93IGF1dGhvcnMgdG8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiBleGlzdGluZyB0aXBzIHVzaW5nIHRoZSBET00KZnVuY3Rpb24gZG9tVFRfdXBkYXRlKGhhbmRsZSwgY29udGVudCwgdHlwZSkKewoJLy8gdHlwZSBkZWZhdWx0cyB0byAnY29udGVudCcsIGNhbiBhbHNvIGJlICdjYXB0aW9uJwoJaWYgKHR5cGVvZih0eXBlKSA9PSAndW5kZWZpbmVkJykKCXsKCQl0eXBlID0gJ2NvbnRlbnQnOwoJfQoKCXZhciB0aXAgPSBkb21UVF90b29sdGlwcy5nZXQoaGFuZGxlKTsKCWlmICghdGlwKQoJewoJCXJldHVybjsKCX0KCgl2YXIgdGlwT2JqID0gdGlwLmdldCgnbm9kZScpOwoJdmFyIHVwZGF0ZU5vZGU7CglpZiAodHlwZSA9PSAnY29udGVudCcpCgl7CgkJLy8gPGRpdiBjbGFzcz0iY29udGVudHMiPi4uLgoJCXVwZGF0ZU5vZGUgPSB0aXBPYmouZmlyc3RDaGlsZDsKCQlpZiAodXBkYXRlTm9kZS5jbGFzc05hbWUgIT0gJ2NvbnRlbnRzJykKCQl7CgkJCS8vIDx0YWJsZT48dGJvZHk+PHRyPi4uLjwvdHI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJjb250ZW50cyI+Li4uCgkJCXVwZGF0ZU5vZGUgPSB1cGRhdGVOb2RlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7CgkJfQoJfQoJZWxzZQoJewoJCXVwZGF0ZU5vZGUgPSB0aXBPYmouZmlyc3RDaGlsZDsKCQlpZiAodXBkYXRlTm9kZS5jbGFzc05hbWUgPT0gJ2NvbnRlbnRzJykKCQl7CgkJCS8vIG1pc3NpbmcgY2FwdGlvbgoJCQlyZXR1cm47CgkJfQoKCQkvLyA8dGFibGU+PHRib2R5Pjx0cj48dGQ+PGRpdiBjbGFzcz0iY2FwdGlvbiI+Li4uCgkJdXBkYXRlTm9kZSA9IHVwZGF0ZU5vZGUuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDsKCX0KCgkvLyBUT0RPOiBhbGxvdyBmb3IgYSBET00gbm9kZSBhcyBjb250ZW50Cgl1cGRhdGVOb2RlLmlubmVySFRNTCA9IGNvbnRlbnQ7Cn0KCi8vIH19fQo=";s:40:"pointimagewiki/bib/tooltip/wz_tooltip.js";s:21448:"LyogVGhpcyBub3RpY2UgbXVzdCBiZSB1bnRvdWNoZWQgYXQgYWxsIHRpbWVzLgoKd3pfdG9vbHRpcC5qcyAgICB2LiAzLjI3CgpUaGUgbGF0ZXN0IHZlcnNpb24gaXMgYXZhaWxhYmxlIGF0Cmh0dHA6Ly93d3cud2FsdGVyem9ybi5jb20Kb3IgaHR0cDovL3d3dy5kZXZpcmEuY29tCm9yIGh0dHA6Ly93d3cud2FsdGVyem9ybi5kZQoKQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgV2FsdGVyIFpvcm4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkNyZWF0ZWQgMS4gMTIuIDIwMDIgYnkgV2FsdGVyIFpvcm4gKFdlYjogaHR0cDovL3d3dy53YWx0ZXJ6b3JuLmNvbSApCkxhc3QgbW9kaWZpZWQ6IDE0LiAyLiAyMDA1CgpDcm9zcy1icm93c2VyIHRvb2x0aXBzIHdvcmtpbmcgZXZlbiBpbiBPcGVyYSA1IGFuZCA2LAphcyB3ZWxsIGFzIGluIE5OIDQsIEdlY2tvLUJyb3dzZXJzLCBJRTQrLCBPcGVyYSA3IGFuZCBLb25xdWVyb3IuCk5vIG9ubW91c2VvdXRzIHJlcXVpcmVkLgpBcHBlYXJhbmNlIG9mIHRvb2x0aXBzIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29uZmlndXJlZAp2aWEgY29tbWFuZHMgd2l0aGluIHRoZSBvbm1vdXNlb3ZlcnMuCgpMSUNFTlNFOiBMR1BMCgpUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSAoTEdQTCkgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgp2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KClRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCgpGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlZSBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwKKi8KCgoKLy8vLy8vLy8vLy8vLy8vLyAgR0xPQkFMIFRPT1BUSVAgQ09ORklHVVJBVElPTiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCnZhciB0dEJnQ29sb3IgICAgICA9ICIjZTZlY2ZmIjsKdmFyIHR0QmdJbWcgICAgICAgID0gIiI7ICAgICAgICAgICAvLyBwYXRoIHRvIGJhY2tncm91bmQgaW1hZ2U7CnZhciB0dEJvcmRlckNvbG9yICA9ICIjMDAzMzk5IjsKdmFyIHR0Qm9yZGVyV2lkdGggID0gMTsKdmFyIHR0RGVsYXkgICAgICAgID0gNTAwOyAgICAgICAgICAvLyB0aW1lIHNwYW4gdW50aWwgdG9vbHRpcCBzaG93cyB1cCBbbWlsbGlzZWNvbmRzXQp2YXIgdHRGb250Q29sb3IgICAgPSAiIzAwMDA2NiI7CnZhciB0dEZvbnRGYWNlICAgICA9ICJhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI7CnZhciB0dEZvbnRTaXplICAgICA9ICIxMXB4IjsKdmFyIHR0Rm9udFdlaWdodCAgID0gIm5vcm1hbCI7ICAgICAvLyBhbHRlcm5hdGl2ZSBpcyAiYm9sZCI7CnZhciB0dE9mZnNldFggICAgICA9IDEyOyAgICAgICAgICAgIC8vIGhvcml6b250YWwgb2Zmc2V0IG9mIGxlZnQtdG9wIGNvcm5lciBmcm9tIG1vdXNlcG9pbnRlcgp2YXIgdHRPZmZzZXRZICAgICAgPSAxNTsgICAgICAgICAgIC8vIHZlcnRpY2FsIG9mZnNldCAgICAgICAgICAgICAgICAgICAiCnZhciB0dFBhZGRpbmcgICAgICA9IDM7ICAgICAgICAgICAgLy8gc3BhY2luZyBiZXR3ZWVuIGJvcmRlciBhbmQgY29udGVudAp2YXIgdHRTaGFkb3dDb2xvciAgPSAiIjsKdmFyIHR0U2hhZG93V2lkdGggID0gMDsKdmFyIHR0VGVtcCAgICAgICAgID0gMDsgICAgICAgICAgICAvLyB0aW1lIHNwYW4gYWZ0ZXIgd2hpY2ggdGhlIHRvb2x0aXAgZGlzYXBwZWFyczsgMCAoemVybykgbWVhbnMgImluZmluaXRlIHRpbWVzcGFuIgp2YXIgdHRUZXh0QWxpZ24gICAgPSAibGVmdCI7CnZhciB0dFRpdGxlQ29sb3IgICA9ICIjZmZmZmZmIjsgICAgLy8gY29sb3Igb2YgY2FwdGlvbiB0ZXh0CnZhciB0dFdpZHRoICAgICAgICA9IDMwMDsKLy8vLy8vLy8vLy8vLy8vLy8vLy8gIEVORCBPRiBUT09MVElQIENPTkZJRyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKCi8vLy8vLy8vLy8vLy8vICBUQUdTIFdJVEggVE9PTFRJUCBGVU5DVElPTkFMSVRZICAvLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBMaXN0IG1heSBiZSBleHRlbmRlZCBvciBzaG9ydGVuZWQ6CnZhciB0dF90YWdzID0gbmV3IEFycmF5KCJhIiwiYXJlYSIsImIiLCJiaWciLCJjYXB0aW9uIiwiY2VudGVyIiwiY29kZSIsImRkIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaSIsImltZyIsImlucHV0IiwibGkiLCJtYXAiLCJvbCIsInAiLCJwcmUiLCJzIiwic21hbGwiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3ViIiwic3VwIiwidGFibGUiLCJ0ZCIsInRoIiwidHIiLCJ0dCIsInUiLCJ2YXIiLCJ1bCIsImxheWVyIik7Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCgovLy8vLy8vLy8gRE9OJ1QgQ0hBTkdFIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KdmFyIHR0X29iaiwgICAgICAgICAgICAgICAgLy8gY3VycmVudCB0b29sdGlwCnR0X29ialcgPSAwLCB0dF9vYmpIID0gMCwgIC8vIHdpZHRoIGFuZCBoZWlnaHQgb2YgdHRfb2JqCnR0X29ialggPSAwLCB0dF9vYmpZID0gMCwKdHRfb2ZmWCA9IDAsIHR0X29mZlkgPSAwLAp4bGltID0gMCwgeWxpbSA9IDAsICAgICAgICAvLyByaWdodCBhbmQgYm90dG9tIGJvcmRlcnMgb2YgdmlzaWJsZSBjbGllbnQgYXJlYQp0dF9zdXAgPSBmYWxzZSwgICAgICAgICAgICAvLyB0cnVlIGlmIFRfQUJPVkUgY21kCnR0X3N0aWNreSA9IGZhbHNlLCAgICAgICAgIC8vIHR0X29iaiBzdGlja3k/CnR0X3dhaXQgPSBmYWxzZSwKdHRfdmlzID0gZmFsc2UsICAgICAgICAgICAgLy8gdG9vbHRpcCB2aXNpYmlsaXR5IGZsYWcKdHRfc3ViID0gZmFsc2UsICAgICAgICAgICAgLy8gdHJ1ZSB3aGlsZSB0b29sdGlwIGJlbG93IG1vdXNlcG9pbnRlcgp0dF91ID0gInVuZGVmaW5lZCIsCnR0X2lucHV0cyA9IG5ldyBBcnJheSgpLCAgIC8vIGRyb3AtZG93bi1ib3hlcyB0byBiZSBoaWRkZW4gaW4gSUUKLy8gT3BlcmE6IGRpc2FibGUgaHJlZiB3aGVuIGhvdmVyaW5nIDxhPgp0dF90YWcgPSBudWxsOyAgICAgICAgICAgICAvLyBzdG9yZXMgaG92ZXJlZCBkb20gbm9kZSwgaHJlZiBhbmQgcHJldmlvdXMgc3RhdHVzYmFyIHR4dAoKCnZhciB0dF9kYiA9IChkb2N1bWVudC5jb21wYXRNb2RlICYmIGRvY3VtZW50LmNvbXBhdE1vZGUgIT0gIkJhY2tDb21wYXQiKT8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogZG9jdW1lbnQuYm9keT8gZG9jdW1lbnQuYm9keSA6IG51bGwsCnR0X24gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CgovLyBCcm93c2VyIGZsYWdzCnZhciB0dF9vcCA9ICEhKHdpbmRvdy5vcGVyYSAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCksCnR0X29wNiA9IHR0X29wICYmICFkb2N1bWVudC5kZWZhdWx0VmlldywKdHRfb3A3ID0gdHRfb3AgJiYgIXR0X29wNiwKdHRfaWUgPSB0dF9uLmluZGV4T2YoIm1zaWUiKSAhPSAtMSAmJiBkb2N1bWVudC5hbGwgJiYgdHRfZGIgJiYgIXR0X29wLAp0dF9uNCA9IChkb2N1bWVudC5sYXllcnMgJiYgdHlwZW9mIGRvY3VtZW50LmNsYXNzZXMgIT0gdHRfdSksCnR0X242ID0gKCF0dF9vcCAmJiBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiB0eXBlb2YgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSAhPSB0dF91KSwKdHRfdzNjID0gIXR0X2llICYmICF0dF9uNiAmJiAhdHRfb3AgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ7Cgp0dF9uID0gIiI7CgoKZnVuY3Rpb24gdHRfSW50KHRfeCkKewoJdmFyIHRfeTsKCXJldHVybiBpc05hTih0X3kgPSBwYXJzZUludCh0X3gpKT8gMCA6IHRfeTsKfQoKZnVuY3Rpb24gd3pSZXBsYWNlKHRfeCwgdF95KQp7Cgl2YXIgdF9yZXQgPSAiIiwKCXRfc3RyID0gdGhpcywKCXRfeEk7Cgl3aGlsZSgodF94SSA9IHRfc3RyLmluZGV4T2YodF94KSkgIT0gLTEpCgl7CgkJdF9yZXQgKz0gdF9zdHIuc3Vic3RyaW5nKDAsIHRfeEkpICsgdF95OwoJCXRfc3RyID0gdF9zdHIuc3Vic3RyaW5nKHRfeEkgKyB0X3gubGVuZ3RoKTsKCX0KCXJldHVybiB0X3JldCt0X3N0cjsKfQpTdHJpbmcucHJvdG90eXBlLnd6UmVwbGFjZSA9IHd6UmVwbGFjZTsKCmZ1bmN0aW9uIHR0X040VGFncyh0YWd0eXAsIHRfZCwgdF95KQp7Cgl0X2QgPSB0X2QgfHwgZG9jdW1lbnQ7Cgl0X3kgPSB0X3kgfHwgbmV3IEFycmF5KCk7Cgl2YXIgdF94ID0gKHRhZ3R5cD09ImEiKT8gdF9kLmxpbmtzIDogdF9kLmxheWVyczsKCWZvcih2YXIgeiA9IHRfeC5sZW5ndGg7IHotLTspIHRfeVt0X3kubGVuZ3RoXSA9IHRfeFt6XTsKCWZvcih2YXIgeiA9IHRfZC5sYXllcnMubGVuZ3RoOyB6LS07KSB0X3kgPSB0dF9ONFRhZ3ModGFndHlwLCB0X2QubGF5ZXJzW3pdLmRvY3VtZW50LCB0X3kpOwoJcmV0dXJuIHRfeTsKfQoKZnVuY3Rpb24gdHRfR2V0U2VsZWN0cygpCnsKCWlmICghdHRfb3A2ICYmICF0dF9pZSkgcmV0dXJuOwoJdmFyIHRfcyA9IHR0X29wNj8gImlucHV0IiA6ICJzZWxlY3QiOwoJaWYgKGRvY3VtZW50LmFsbCkKCXsKCQl2YXIgdF9pID0gZG9jdW1lbnQuYWxsLnRhZ3ModF9zKS5sZW5ndGg7IHdoaWxlKHRfaS0tKQoJCQl0dF9pbnB1dHNbdF9pXSA9IGRvY3VtZW50LmFsbC50YWdzKHRfcylbdF9pXTsKCX0KCWVsc2UgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKQoJewoJCXZhciB0X2kgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0X3MpLmxlbmd0aDsgd2hpbGUodF9pLS0pCgkJCXR0X2lucHV0c1t0X2ldID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodF9zKVt0X2ldOwoJfQoJdmFyIHRfaSA9IHR0X2lucHV0cy5sZW5ndGg7IHdoaWxlKHRfaS0tKQoJewoJCXR0X2lucHV0c1t0X2ldLnggPSAwOwoJCXR0X2lucHV0c1t0X2ldLnkgPSAwOwoJCXZhciB0X28gPSB0dF9pbnB1dHNbdF9pXTsKCQl3aGlsZSh0X28pCgkJewoJCQl0dF9pbnB1dHNbdF9pXS54ICs9IHRfby5vZmZzZXRMZWZ0IHx8IDA7CgkJCXR0X2lucHV0c1t0X2ldLnkgKz0gdF9vLm9mZnNldFRvcHx8IDA7CgkJCXRfbyA9IHRfby5vZmZzZXRQYXJlbnQ7CgkJfQoJfQp9CgpmdW5jdGlvbiB0dF9IdG0odHQsIHRfaWQsIHR4dCkKewoJdmFyIHRfYmdjID0gKHR5cGVvZiB0dC5UX0JHQ09MT1IgIT0gdHRfdSk/IHR0LlRfQkdDT0xPUiA6IHR0QmdDb2xvciwKCXRfYmdpbWcgICA9ICh0eXBlb2YgdHQuVF9CR0lNRyAhPSB0dF91KT8gdHQuVF9CR0lNRyA6IHR0QmdJbWcsCgl0X2JjICAgICAgPSAodHlwZW9mIHR0LlRfQk9SREVSQ09MT1IgIT0gdHRfdSk/IHR0LlRfQk9SREVSQ09MT1IgOiB0dEJvcmRlckNvbG9yLAoJdF9idyAgICAgID0gKHR5cGVvZiB0dC5UX0JPUkRFUldJRFRIICE9IHR0X3UpPyB0dC5UX0JPUkRFUldJRFRIIDogdHRCb3JkZXJXaWR0aCwKCXRfZmYgICAgICA9ICh0eXBlb2YgdHQuVF9GT05URkFDRSAhPSB0dF91KT8gdHQuVF9GT05URkFDRSA6IHR0Rm9udEZhY2UsCgl0X2ZjICAgICAgPSAodHlwZW9mIHR0LlRfRk9OVENPTE9SICE9IHR0X3UpPyB0dC5UX0ZPTlRDT0xPUiA6IHR0Rm9udENvbG9yLAoJdF9mc3ogICAgID0gKHR5cGVvZiB0dC5UX0ZPTlRTSVpFICE9IHR0X3UpPyB0dC5UX0ZPTlRTSVpFIDogdHRGb250U2l6ZSwKCXRfZndnaHQgICA9ICh0eXBlb2YgdHQuVF9GT05UV0VJR0hUICE9IHR0X3UpPyB0dC5UX0ZPTlRXRUlHSFQgOiB0dEZvbnRXZWlnaHQsCgl0X3BhZGQgICAgPSAodHlwZW9mIHR0LlRfUEFERElORyAhPSB0dF91KT8gdHQuVF9QQURESU5HIDogdHRQYWRkaW5nLAoJdF9zaGMgICAgID0gKHR5cGVvZiB0dC5UX1NIQURPV0NPTE9SICE9IHR0X3UpPyB0dC5UX1NIQURPV0NPTE9SIDogKHR0U2hhZG93Q29sb3IgfHwgMCksCgl0X3NodyAgICAgPSAodHlwZW9mIHR0LlRfU0hBRE9XV0lEVEggIT0gdHRfdSk/IHR0LlRfU0hBRE9XV0lEVEggOiAodHRTaGFkb3dXaWR0aCB8fCAwKSwKCXRfYWxnbiAgICA9ICh0eXBlb2YgdHQuVF9URVhUQUxJR04gIT0gdHRfdSk/IHR0LlRfVEVYVEFMSUdOIDogdHRUZXh0QWxpZ24sCgl0X3RpdCAgICAgPSAodHlwZW9mIHR0LlRfVElUTEUgIT0gdHRfdSk/IHR0LlRfVElUTEUgOiAiIiwKCXRfdGl0YyAgICA9ICh0eXBlb2YgdHQuVF9USVRMRUNPTE9SICE9IHR0X3UpPyB0dC5UX1RJVExFQ09MT1IgOiB0dFRpdGxlQ29sb3IsCgl0X3cgICAgICAgPSAodHlwZW9mIHR0LlRfV0lEVEggIT0gdHRfdSk/IHR0LlRfV0lEVEggIDogdHRXaWR0aDsKCWlmICh0X3NoYyB8fCB0X3NodykKCXsKCQl0X3NoYyA9IHRfc2hjIHx8ICIjY2NjY2NjIjsKCQl0X3NodyA9IHRfc2h3IHx8IDU7Cgl9CglpZiAodHRfbjQgJiYgKHRfZnN6ID09ICIxMHB4IiB8fCB0X2ZzeiA9PSAiMTFweCIpKSB0X2ZzeiA9ICIxMnB4IjsKCgoJdmFyIHRfeSA9ICc8ZGl2IGlkPSInK3RfaWQrJyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAxMDsnOwoJdF95ICs9ICdsZWZ0OjBweDt0b3A6MHB4O3dpZHRoOicrKHRfdyt0X3NodykrJ3B4O3Zpc2liaWxpdHk6JysodHRfbjQ/ICdoaWRlJyA6ICdoaWRkZW4nKSsnOyI+JyArCgkJJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCInKyh0X2JjPyAoJyBiZ2NvbG9yPSInK3RfYmMrJyInKSA6ICcnKSsnIHdpZHRoPSInK3RfdysnIj4nOwoJaWYgKHRfdGl0KQoJewoJCXRfeSArPSAnPHRyPjx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweDsiIGFsaWduPSInK3RfYWxnbisnIj48Zm9udCBjb2xvcj0iJyt0X3RpdGMrJyIgZmFjZT0iJyt0X2ZmKyciICcgKwoJCQknc3R5bGU9ImNvbG9yOicrdF90aXRjKyc7Zm9udC1mYW1pbHk6Jyt0X2ZmKyc7Zm9udC1zaXplOicrdF9mc3orJzsiPjxiPicgKwoJCQkodHRfbjQ/ICcmbmJzcDsnIDogJycpK3RfdGl0Kyc8XC9iPjxcL2ZvbnQ+PFwvdGQ+PFwvdHI+JzsKCX0KCXRfeSArPSAnPHRyPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iJyt0X3BhZGQrJyIgY2VsbHNwYWNpbmc9IicrdF9idysnIiB3aWR0aD0iMTAwJSI+JyArCgkJJzx0cj48dGQnKyh0X2JnYz8gKCcgYmdjb2xvcj0iJyt0X2JnYysnIicpIDogJycpKyh0X2JnaW1nPyAnIGJhY2tncm91bmQ9IicrdF9iZ2ltZysnIicgOiAnJyk7CglpZiAodHRfbjYpIHRfeSArPSAnIHN0eWxlPSJwYWRkaW5nOicrdF9wYWRkKydweDsiJzsKCXRfeSArPSAnIGFsaWduPSInK3RfYWxnbisnIj48Zm9udCBjb2xvcj0iJyt0X2ZjKyciIGZhY2U9IicrdF9mZisnIicgKwoJCScgc3R5bGU9ImNvbG9yOicrdF9mYysnO2ZvbnQtZmFtaWx5OicrdF9mZisnO2ZvbnQtc2l6ZTonK3RfZnN6Kyc7Zm9udC13ZWlnaHQ6Jyt0X2Z3Z2h0Kyc7Ij4nOwoJaWYgKHRfZndnaHQgPT0gJ2JvbGQnKSB0X3kgKz0gJzxiPic7Cgl0X3kgKz0gdHh0OwoJaWYgKHRfZndnaHQgPT0gJ2JvbGQnKSB0X3kgKz0gJzxcL2I+JzsKCXRfeSArPSAnPFwvZm9udD48XC90ZD48XC90cj48XC90YWJsZT48XC90ZD48XC90cj48XC90YWJsZT4nOwoJaWYgKHRfc2h3KQoJewoJCXZhciB0X3NwY3QgPSBNYXRoLnJvdW5kKHRfc2h3KjEuMyk7CgkJaWYgKHR0X240KQoJCXsKCQkJdF95ICs9ICc8bGF5ZXIgYmdjb2xvcj0iJyt0X3NoYysnIiBsZWZ0PSInK3RfdysnIiB0b3A9IicrdF9zcGN0KyciIHdpZHRoPSInK3Rfc2h3KyciIGhlaWdodD0iMCI+PFwvbGF5ZXI+JyArCgkJCQknPGxheWVyIGJnY29sb3I9IicrdF9zaGMrJyIgbGVmdD0iJyt0X3NwY3QrJyIgYWxpZ249ImJvdHRvbSIgd2lkdGg9IicrKHRfdy10X3NwY3QpKyciIGhlaWdodD0iJyt0X3NodysnIj48XC9sYXllcj4nOwoJCX0KCQllbHNlCgkJewoJCQl2YXIgdF9vcGEgPSB0dF9uNj8gJy1tb3otb3BhY2l0eTowLjg1OycgOiB0dF9pZT8gJ2ZpbHRlcjpBbHBoYShvcGFjaXR5PTg1KTsnIDogJyc7CgkJCXRfeSArPSAnPGRpdiBpZD0iJyt0X2lkKydSIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDonK3Rfc2hjKyc7bGVmdDonK3RfdysncHg7dG9wOicrdF9zcGN0KydweDt3aWR0aDonK3Rfc2h3KydweDtoZWlnaHQ6MXB4O292ZXJmbG93OmhpZGRlbjsnK3Rfb3BhKyciPjxcL2Rpdj4nICsKCQkJCSc8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kOicrdF9zaGMrJztsZWZ0OicrdF9zcGN0KydweDt0b3A6MHB4O3dpZHRoOicrKHRfdy10X3NwY3QpKydweDtoZWlnaHQ6Jyt0X3NodysncHg7b3ZlcmZsb3c6aGlkZGVuOycrdF9vcGErJyI+PFwvZGl2Pic7CgkJfQoJfQoJdF95ICs9ICc8XC9kaXY+JzsKCXJldHVybiB0X3k7Cn0KCmZ1bmN0aW9uIHR0X0luaXQoKQp7CglpZiAoISh0dF9vcCB8fCB0dF9uNCB8fCB0dF9uNiB8fCB0dF9pZSB8fCB0dF93M2MpKSByZXR1cm47CgoJdmFyIGh0bSA9IHR0X240PyAnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij48XC9kaXY+JyA6ICcnLAoJdGFncywKCXRfdGosCglvdmVyLAoJZXNjID0gJ3JldHVybiBlc2NhcGUoJzsKCXZhciBpID0gdHRfdGFncy5sZW5ndGg7IHdoaWxlKGktLSkKCXsKCQl0YWdzID0gdHRfaWU/IChkb2N1bWVudC5hbGwudGFncyh0dF90YWdzW2ldKSB8fCAxKQoJCQk6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lPyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHRfdGFnc1tpXSkgfHwgMSkKCQkJOiAoIXR0X240ICYmIHR0X3RhZ3NbaV09PSJhIik/IGRvY3VtZW50LmxpbmtzCgkJCTogMTsKCQlpZiAodHRfbjQgJiYgKHR0X3RhZ3NbaV0gPT0gImEiIHx8IHR0X3RhZ3NbaV0gPT0gImxheWVyIikpIHRhZ3MgPSB0dF9ONFRhZ3ModHRfdGFnc1tpXSk7CgkJdmFyIGogPSB0YWdzLmxlbmd0aDsgd2hpbGUoai0tKQoJCXsKCQkJaWYgKHR5cGVvZiAodF90aiA9IHRhZ3Nbal0pLm9ubW91c2VvdmVyID09ICJmdW5jdGlvbiIgJiYgdF90ai5vbm1vdXNlb3Zlci50b1N0cmluZygpLmluZGV4T2YoZXNjKSAhPSAtMSAmJiAhdHRfbjYgfHwgdHRfbjYgJiYgKG92ZXIgPSB0X3RqLmdldEF0dHJpYnV0ZSgib25tb3VzZW92ZXIiKSkgJiYgb3Zlci5pbmRleE9mKGVzYykgIT0gLTEpCgkJCXsKCQkJCWlmIChvdmVyKSB0X3RqLm9ubW91c2VvdmVyID0gbmV3IEZ1bmN0aW9uKG92ZXIpOwoJCQkJdmFyIHR4dCA9IHVuZXNjYXBlKHRfdGoub25tb3VzZW92ZXIoKSk7CgkJCQlodG0gKz0gdHRfSHRtKAoJCQkJCXRfdGosCgkJCQkJInRPb0x0SXAiK2krIiIraiwKCQkJCQl0eHQud3pSZXBsYWNlKCImICIsIiYiKQoJCQkJKTsKCgkJCQl0X3RqLm9ubW91c2VvdmVyID0gbmV3IEZ1bmN0aW9uKCdlJywKCQkJCQkndHRfU2hvdyhlLCcrCgkJCQkJJyJ0T29MdElwJyAraSsnJytqKyAnIiwnKwoJCQkJCSh0eXBlb2YgdF90ai5UX0FCT1ZFICE9IHR0X3UpKycsJysKCQkJCQkoKHR5cGVvZiB0X3RqLlRfREVMQVkgIT0gdHRfdSk/IHRfdGouVF9ERUxBWSA6IHR0RGVsYXkpKycsJysKCQkJCQkoKHR5cGVvZiB0X3RqLlRfRklYICE9IHR0X3UpPyAnIicrdF90ai5UX0ZJWCsnIicgOiAnIiInKSsnLCcrCgkJCQkJKHR5cGVvZiB0X3RqLlRfTEVGVCAhPSB0dF91KSsnLCcrCgkJCQkJKCh0eXBlb2YgdF90ai5UX09GRlNFVFggIT0gdHRfdSk/IHRfdGouVF9PRkZTRVRYIDogdHRPZmZzZXRYKSsnLCcrCgkJCQkJKCh0eXBlb2YgdF90ai5UX09GRlNFVFkgIT0gdHRfdSk/IHRfdGouVF9PRkZTRVRZIDogdHRPZmZzZXRZKSsnLCcrCgkJCQkJKHR5cGVvZiB0X3RqLlRfU1RBVElDICE9IHR0X3UpKycsJysKCQkJCQkodHlwZW9mIHRfdGouVF9TVElDS1kgIT0gdHRfdSkrJywnKwoJCQkJCSgodHlwZW9mIHRfdGouVF9URU1QICE9IHR0X3UpPyB0X3RqLlRfVEVNUCA6IHR0VGVtcCkrCgkJCQkJJyk7JwoJCQkJKTsKCQkJCXRfdGoub25tb3VzZW91dCA9IHR0X0hpZGU7CgkJCQlpZiAodF90ai5hbHQpIHRfdGouYWx0ID0gIiI7CgkJCQlpZiAodF90ai50aXRsZSkgdF90ai50aXRsZSA9ICIiOwoJCQl9CgkJfQoJfQoJZG9jdW1lbnQud3JpdGUoaHRtKTsKfQoKZnVuY3Rpb24gdHRfRXZYKHRfZSkKewoJdmFyIHRfeSA9IHR0X0ludCh0X2UucGFnZVggfHwgdF9lLmNsaWVudFggfHwgMCkgKwoJCXR0X0ludCh0dF9pZT8gdHRfZGIuc2Nyb2xsTGVmdCA6IDApICsKCQl0dF9vZmZYOwoJaWYgKHRfeSA+IHhsaW0pIHRfeSA9IHhsaW07Cgl2YXIgdF9zY3IgPSB0dF9JbnQod2luZG93LnBhZ2VYT2Zmc2V0IHx8ICh0dF9kYj8gdHRfZGIuc2Nyb2xsTGVmdCA6IDApIHx8IDApOwoJaWYgKHRfeSA8IHRfc2NyKSB0X3kgPSB0X3NjcjsKCXJldHVybiB0X3k7Cn0KCmZ1bmN0aW9uIHR0X0V2WSh0X2UpCnsKCXZhciB0X3kgPSB0dF9JbnQodF9lLnBhZ2VZIHx8IHRfZS5jbGllbnRZIHx8IDApICsKCQl0dF9JbnQodHRfaWU/IHR0X2RiLnNjcm9sbFRvcCA6IDApOwoJaWYgKHR0X3N1cCkgdF95IC09ICh0dF9vYmpIICsgdHRfb2ZmWSAtIDE1KTsKCWVsc2UgaWYgKHRfeSA+IHlsaW0gfHwgIXR0X3N1YiAmJiB0X3kgPiB5bGltLTI0KQoJewoJCXRfeSAtPSAodHRfb2JqSCArIDUpOwoJCXR0X3N1YiA9IGZhbHNlOwoJfQoJZWxzZQoJewoJCXRfeSArPSB0dF9vZmZZOwoJCXR0X3N1YiA9IHRydWU7Cgl9CglyZXR1cm4gdF95Owp9CgpmdW5jdGlvbiB0dF9SZWxlYXNNb3YoKQp7CglpZiAoZG9jdW1lbnQub25tb3VzZW1vdmUgPT0gdHRfTW92ZSkKCXsKCQlpZiAoZG9jdW1lbnQucmVsZWFzZUV2ZW50cykgZG9jdW1lbnQucmVsZWFzZUV2ZW50cyhFdmVudC5NT1VTRU1PVkUpOwoJCWRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDsKCX0KfQoKZnVuY3Rpb24gdHRfSGlkZUlucHV0KCkKewoJaWYgKCEodHRfaWUgfHwgdHRfb3A2KSB8fCAhdHRfaW5wdXRzKSByZXR1cm47Cgl2YXIgdF9vOwoJdmFyIHRfaSA9IHR0X2lucHV0cy5sZW5ndGg7IHdoaWxlKHRfaS0tKQoJewoJCXRfbyA9IHR0X2lucHV0c1t0X2ldOwoJCWlmICh0dF92aXMgJiYgdHRfb2JqWCt0dF9vYmpXID4gdF9vLnggJiYgdHRfb2JqWCA8IHRfby54K3Rfby5vZmZzZXRXaWR0aCAmJiB0dF9vYmpZK3R0X29iakggPiB0X28ueSAmJiB0dF9vYmpZIDwgdF9vLnkrdF9vLm9mZnNldEhlaWdodCkKCQkJdF9vLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKCQllbHNlIHRfby5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwoJfQp9CgpmdW5jdGlvbiB0dF9HZXREaXYodF9pZCkKewoJcmV0dXJuKAoJCXR0X240PyAoZG9jdW1lbnQubGF5ZXJzW3RfaWRdIHx8IG51bGwpCgkJOiB0dF9pZT8gKGRvY3VtZW50LmFsbFt0X2lkXSB8fCBudWxsKQoJCTogKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRfaWQpIHx8IG51bGwpCgkpOwp9CgpmdW5jdGlvbiB0dF9HZXREaXZXKCkKewoJcmV0dXJuIHR0X0ludCgKCQl0dF9uND8gdHRfb2JqLmNsaXAud2lkdGgKCQk6IHR0X29iai5zdHlsZS5waXhlbFdpZHRoPyB0dF9vYmouc3R5bGUucGl4ZWxXaWR0aAoJCTogdHRfb2JqLm9mZnNldFdpZHRoCgkpOwp9CgpmdW5jdGlvbiB0dF9HZXREaXZIKCkKewoJcmV0dXJuIHR0X0ludCgKCQl0dF9uND8gdHRfb2JqLmNsaXAuaGVpZ2h0CgkJOiB0dF9vYmouc3R5bGUucGl4ZWxIZWlnaHQ/IHR0X29iai5zdHlsZS5waXhlbEhlaWdodAoJCTogdHRfb2JqLm9mZnNldEhlaWdodAoJKTsKfQoKLy8gQ29tcGF0IHdpdGggRHJhZ0Ryb3AgTGliOiBFbnN1cmUgdGhhdCB6LWluZGV4IG9mIHRvb2x0aXAgaXMgbGlmdGVkIGJleW9uZCB0b3BsZXZlbCBkcmFnZHJvcCBlbGVtZW50CmZ1bmN0aW9uIHR0X1NldERpdlooKQp7Cgl2YXIgdF9pID0gdHRfb2JqLnN0eWxlIHx8IHR0X29iajsKCWlmICh3aW5kb3cuZGQgJiYgZGQueikKCQl0X2kuekluZGV4ID0gTWF0aC5tYXgoZGQueisxLCB0X2kuekluZGV4KTsKfQoKZnVuY3Rpb24gdHRfU2V0RGl2UG9zKHRfeCwgdF95KQp7Cgl2YXIgdF9pID0gdHRfb2JqLnN0eWxlIHx8IHR0X29iajsKCXZhciB0X3B4ID0gKHR0X29wNiB8fCB0dF9uNCk/ICcnIDogJ3B4JzsKCXRfaS5sZWZ0ID0gKHR0X29ialggPSB0X3gpICsgdF9weDsKCXRfaS50b3AgPSAodHRfb2JqWSA9IHRfeSkgKyB0X3B4OwoJdHRfSGlkZUlucHV0KCk7Cn0KCmZ1bmN0aW9uIHR0X1Nob3dEaXYodF94KQp7CglpZiAodHRfbjQpIHR0X29iai52aXNpYmlsaXR5ID0gdF94PyAnc2hvdycgOiAnaGlkZSc7CgllbHNlIHR0X29iai5zdHlsZS52aXNpYmlsaXR5ID0gdF94PyAndmlzaWJsZScgOiAnaGlkZGVuJzsKCXR0X3ZpcyA9IHRfeDsKCXR0X0hpZGVJbnB1dCgpOwp9CgpmdW5jdGlvbiB0dF9PcERlSHJlZih0X2UpCnsKCWlmICh0X2UgJiYgdF9lLnRhcmdldC5oYXNBdHRyaWJ1dGUoImhyZWYiKSkKCXsKCQl0dF90YWcgPSB0X2UudGFyZ2V0OwoJCXR0X3RhZy50X2hyZWYgPSB0dF90YWcuZ2V0QXR0cmlidXRlKCJocmVmIik7CgkJdHRfdGFnLnJlbW92ZUF0dHJpYnV0ZSgiaHJlZiIpOwoJCXR0X3RhZy5zdHlsZS5jdXJzb3IgPSAiaGFuZCI7CgkJdHRfdGFnLm9ubW91c2Vkb3duID0gdHRfT3BSZUhyZWY7CgkJdHRfdGFnLnN0YXRzID0gd2luZG93LnN0YXR1czsKCQl3aW5kb3cuc3RhdHVzID0gdHRfdGFnLnRfaHJlZjsKCX0KfQoKZnVuY3Rpb24gdHRfT3BSZUhyZWYoKQp7CglpZiAodHRfdGFnKQoJewoJCXR0X3RhZy5zZXRBdHRyaWJ1dGUoImhyZWYiLCB0dF90YWcudF9ocmVmKTsKCQl3aW5kb3cuc3RhdHVzID0gdHRfdGFnLnN0YXRzOwoJCXR0X3RhZyA9IG51bGw7Cgl9Cn0KCmZ1bmN0aW9uIHR0X1Nob3codF9lLCB0X2lkLCB0X3N1cCwgdF9kZWxheSwgdF9maXgsIHRfbGVmdCwgdF9vZmZ4LCB0X29mZnksIHRfc3RhdGljLCB0X3N0aWNreSwgdF90ZW1wKQp7CglpZiAodHRfb2JqKSB0dF9IaWRlKCk7Cgl2YXIgdF9tZiA9IGRvY3VtZW50Lm9ubW91c2Vtb3ZlIHx8IG51bGw7CglpZiAod2luZG93LmRkICYmICh3aW5kb3cuRFJBRyAmJiB0X21mID09IERSQUcgfHwgd2luZG93LlJFU0laRSAmJiB0X21mID09IFJFU0laRSkpIHJldHVybjsKCXZhciB0X3VmID0gZG9jdW1lbnQub25tb3VzZXVwIHx8IG51bGw7CglpZiAodF9tZiAmJiB0X3VmKSB0X3VmKHRfZSk7CgoJdHRfb2JqID0gdHRfR2V0RGl2KHRfaWQpOwoJaWYgKHR0X29iaikKCXsKCQl0X2UgPSB0X2UgfHwgd2luZG93LmV2ZW50OwoJCXR0X3N1YiA9ICEodHRfc3VwID0gdF9zdXApOwoJCXR0X3N0aWNreSA9IHRfc3RpY2t5OwoJCXR0X29ialcgPSB0dF9HZXREaXZXKCk7CgkJdHRfb2JqSCA9IHR0X0dldERpdkgoKTsKCQl0dF9vZmZYID0gdF9sZWZ0PyAtKHR0X29ialcrdF9vZmZ4KSA6IHRfb2ZmeDsKCQl0dF9vZmZZID0gdF9vZmZ5OwoJCWlmICh0dF9vcDcpIHR0X09wRGVIcmVmKHRfZSk7CgkJaWYgKHR0X240KQoJCXsKCQkJaWYgKHR0X29iai5kb2N1bWVudC5sYXllcnMubGVuZ3RoKQoJCQl7CgkJCQl2YXIgdF9zaCA9IHR0X29iai5kb2N1bWVudC5sYXllcnNbMF07CgkJCQl0X3NoLmNsaXAuaGVpZ2h0ID0gdHRfb2JqSCAtIE1hdGgucm91bmQodF9zaC5jbGlwLndpZHRoKjEuMyk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJdmFyIHRfc2ggPSB0dF9HZXREaXYodF9pZCsnUicpOwoJCQlpZiAodF9zaCkKCQkJewoJCQkJdmFyIHRfaCA9IHR0X29iakggLSB0dF9JbnQodF9zaC5zdHlsZS5waXhlbFRvcCB8fCB0X3NoLnN0eWxlLnRvcCB8fCAwKTsKCQkJCWlmICh0eXBlb2YgdF9zaC5zdHlsZS5waXhlbEhlaWdodCAhPSB0dF91KSB0X3NoLnN0eWxlLnBpeGVsSGVpZ2h0ID0gdF9oOwoJCQkJZWxzZSB0X3NoLnN0eWxlLmhlaWdodCA9IHRfaCsncHgnOwoJCQl9CgkJfQoKCQl0dF9HZXRTZWxlY3RzKCk7CgoJCXhsaW0gPSB0dF9JbnQoKHR0X2RiICYmIHR0X2RiLmNsaWVudFdpZHRoKT8gdHRfZGIuY2xpZW50V2lkdGggOiB3aW5kb3cuaW5uZXJXaWR0aCkgKwoJCQl0dF9JbnQod2luZG93LnBhZ2VYT2Zmc2V0IHx8ICh0dF9kYj8gdHRfZGIuc2Nyb2xsTGVmdCA6IDApIHx8IDApIC0KCQkJdHRfb2JqVyAtCgkJCSh0dF9uND8gMjEgOiAwKTsKCQl5bGltID0gdHRfSW50KHdpbmRvdy5pbm5lckhlaWdodCB8fCB0dF9kYi5jbGllbnRIZWlnaHQpICsKCQkJdHRfSW50KHdpbmRvdy5wYWdlWU9mZnNldCB8fCAodHRfZGI/IHR0X2RiLnNjcm9sbFRvcCA6IDApIHx8IDApIC0KCQkJdHRfb2JqSCAtIHR0X29mZlk7CgoJCXR0X1NldERpdlooKTsKCQlpZiAodF9maXgpIHR0X1NldERpdlBvcyh0dF9JbnQoKHRfZml4ID0gdF9maXguc3BsaXQoJywnKSlbMF0pLCB0dF9JbnQodF9maXhbMV0pKTsKCQllbHNlIHR0X1NldERpdlBvcyh0dF9FdlgodF9lKSwgdHRfRXZZKHRfZSkpOwoKCQl2YXIgdF90eHQgPSAndHRfU2hvd0RpdihcJ3RydWVcJyk7JzsKCQlpZiAodF9zdGlja3kpIHRfdHh0ICs9ICd7JysKCQkJCSd0dF9SZWxlYXNNb3YoKTsnKwoJCQkJJ3dpbmRvdy50dF91cEZ1bmMgPSBkb2N1bWVudC5vbm1vdXNldXAgfHwgbnVsbDsnKwoJCQkJJ2lmIChkb2N1bWVudC5jYXB0dXJlRXZlbnRzKSBkb2N1bWVudC5jYXB0dXJlRXZlbnRzKEV2ZW50Lk1PVVNFVVApOycrCgkJCQknZG9jdW1lbnQub25tb3VzZXVwID0gbmV3IEZ1bmN0aW9uKCJ3aW5kb3cuc2V0VGltZW91dChcJ3R0X0hpZGUoKTtcJywgMTApOyIpOycrCgkJCSd9JzsKCQllbHNlIGlmICh0X3N0YXRpYykgdF90eHQgKz0gJ3R0X1JlbGVhc01vdigpOyc7CgkJaWYgKHRfdGVtcCA+IDApIHRfdHh0ICs9ICd3aW5kb3cudHRfcnRtID0gd2luZG93LnNldFRpbWVvdXQoXCd0dF9zdGlja3kgPSBmYWxzZTsgdHRfSGlkZSgpO1wnLCcrdF90ZW1wKycpOyc7CgkJd2luZG93LnR0X3JkbCA9IHdpbmRvdy5zZXRUaW1lb3V0KHRfdHh0LCB0X2RlbGF5KTsKCgkJaWYgKCF0X2ZpeCkKCQl7CgkJCWlmIChkb2N1bWVudC5jYXB0dXJlRXZlbnRzKSBkb2N1bWVudC5jYXB0dXJlRXZlbnRzKEV2ZW50Lk1PVVNFTU9WRSk7CgkJCWRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gdHRfTW92ZTsKCQl9Cgl9Cn0KCnZhciB0dF9hcmVhID0gZmFsc2U7CmZ1bmN0aW9uIHR0X01vdmUodF9ldikKewoJaWYgKCF0dF9vYmopIHJldHVybjsKCWlmICh0dF9uNiB8fCB0dF93M2MpCgl7CgkJaWYgKHR0X3dhaXQpIHJldHVybjsKCQl0dF93YWl0ID0gdHJ1ZTsKCQlzZXRUaW1lb3V0KCd0dF93YWl0ID0gZmFsc2U7JywgNSk7Cgl9Cgl2YXIgdF9lID0gdF9ldiB8fCB3aW5kb3cuZXZlbnQ7Cgl0dF9TZXREaXZQb3ModHRfRXZYKHRfZSksIHR0X0V2WSh0X2UpKTsKCWlmICh0dF9vcDYpCgl7CgkJaWYgKHR0X2FyZWEgJiYgdF9lLnRhcmdldC50YWdOYW1lICE9ICdBUkVBJykgdHRfSGlkZSgpOwoJCWVsc2UgaWYgKHRfZS50YXJnZXQudGFnTmFtZSA9PSAnQVJFQScpIHR0X2FyZWEgPSB0cnVlOwoJfQp9CgpmdW5jdGlvbiB0dF9IaWRlKCkKewoJaWYgKHdpbmRvdy50dF9vYmopCgl7CgkJaWYgKHdpbmRvdy50dF9yZGwpIHdpbmRvdy5jbGVhclRpbWVvdXQodHRfcmRsKTsKCQlpZiAoIXR0X3N0aWNreSB8fCAhdHRfdmlzKQoJCXsKCQkJaWYgKHdpbmRvdy50dF9ydG0pIHdpbmRvdy5jbGVhclRpbWVvdXQodHRfcnRtKTsKCQkJdHRfU2hvd0RpdihmYWxzZSk7CgkJCXR0X1NldERpdlBvcygtdHRfb2JqVywgLXR0X29iakgpOwoJCQl0dF9vYmogPSBudWxsOwoJCQlpZiAodHlwZW9mIHdpbmRvdy50dF91cEZ1bmMgIT0gdHRfdSkgZG9jdW1lbnQub25tb3VzZXVwID0gd2luZG93LnR0X3VwRnVuYzsKCQl9CgkJdHRfc3RpY2t5ID0gZmFsc2U7CgkJaWYgKHR0X29wNiAmJiB0dF9hcmVhKSB0dF9hcmVhID0gZmFsc2U7CgkJdHRfUmVsZWFzTW92KCk7CgkJaWYgKHR0X29wNykgdHRfT3BSZUhyZWYoKTsKCQl0dF9IaWRlSW5wdXQoKTsKCX0KfQoKdHRfSW5pdCgpOwo=";s:30:"pointimagewiki/bib/x/x_core.js";s:11084:"LyogeF9jb3JlLmpzIGNvbXBpbGVkIGZyb20gWCA0LjAgd2l0aCBYQyAwLjI3Yi4gRGlzdHJpYnV0ZWQgYnkgR05VIExHUEwuIEZvciBjb3B5cmlnaHRzLCBsaWNlbnNlLCBkb2N1bWVudGF0aW9uIGFuZCBtb3JlIHZpc2l0IENyb3NzLUJyb3dzZXIuY29tICovDQp2YXIgeE9wN1VwLHhPcDZEbix4SUU0VXAseElFNCx4SUU1LHhOTjQseFVBPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtpZih3aW5kb3cub3BlcmEpe3ZhciBpPXhVQS5pbmRleE9mKCdvcGVyYScpO2lmKGkhPS0xKXt2YXIgdj1wYXJzZUludCh4VUEuY2hhckF0KGkrNikpO3hPcDdVcD12Pj03O3hPcDZEbj12PDc7fX1lbHNlIGlmKG5hdmlnYXRvci52ZW5kb3IhPSdLREUnICYmIGRvY3VtZW50LmFsbCAmJiB4VUEuaW5kZXhPZignbXNpZScpIT0tMSl7eElFNFVwPXBhcnNlRmxvYXQobmF2aWdhdG9yLmFwcFZlcnNpb24pPj00O3hJRTQ9eFVBLmluZGV4T2YoJ21zaWUgNCcpIT0tMTt4SUU1PXhVQS5pbmRleE9mKCdtc2llIDUnKSE9LTE7fWVsc2UgaWYoZG9jdW1lbnQubGF5ZXJzKXt4Tk40PXRydWU7fXhNYWM9eFVBLmluZGV4T2YoJ21hYycpIT0tMTtmdW5jdGlvbiB4QmFja2dyb3VuZChlLGMsaSl7aWYoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJldHVybiAnJzt2YXIgYmc9Jyc7aWYoZS5zdHlsZSkge2lmKHhTdHIoYykpIHtpZigheE9wNkRuKSBlLnN0eWxlLmJhY2tncm91bmRDb2xvcj1jO2Vsc2UgZS5zdHlsZS5iYWNrZ3JvdW5kPWM7fWlmKHhTdHIoaSkpIGUuc3R5bGUuYmFja2dyb3VuZEltYWdlPShpIT0nJyk/ICd1cmwoJytpKycpJyA6IG51bGw7aWYoIXhPcDZEbikgYmc9ZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7ZWxzZSBiZz1lLnN0eWxlLmJhY2tncm91bmQ7fXJldHVybiBiZzt9ZnVuY3Rpb24geENsaWVudEhlaWdodCgpe3ZhciBoPTA7aWYoeE9wNkRuKSBoPXdpbmRvdy5pbm5lckhlaWdodDtlbHNlIGlmKGRvY3VtZW50LmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnICYmICF3aW5kb3cub3BlcmEgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O2Vsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCloPWRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O2Vsc2UgaWYoeERlZih3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQud2lkdGgpKSB7aD13aW5kb3cuaW5uZXJIZWlnaHQ7aWYoZG9jdW1lbnQud2lkdGg+d2luZG93LmlubmVyV2lkdGgpIGgtPTE2O31yZXR1cm4gaDt9ZnVuY3Rpb24geENsaWVudFdpZHRoKCl7dmFyIHc9MDtpZih4T3A2RG4pIHc9d2luZG93LmlubmVyV2lkdGg7ZWxzZSBpZihkb2N1bWVudC5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JyAmJiAhd2luZG93Lm9wZXJhICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpdz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7ZWxzZSBpZihkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpdz1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO2Vsc2UgaWYoeERlZih3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuaGVpZ2h0KSkge3c9d2luZG93LmlubmVyV2lkdGg7aWYoZG9jdW1lbnQuaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodCkgdy09MTY7fXJldHVybiB3O31mdW5jdGlvbiB4Q2xpcChlLHQscixiLGwpe2lmKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm47aWYoZS5zdHlsZSkge2lmICh4TnVtKGwpKSBlLnN0eWxlLmNsaXA9J3JlY3QoJyt0KydweCAnK3IrJ3B4ICcrYisncHggJytsKydweCknO2Vsc2UgZS5zdHlsZS5jbGlwPSdyZWN0KDAgJytwYXJzZUludChlLnN0eWxlLndpZHRoKSsncHggJytwYXJzZUludChlLnN0eWxlLmhlaWdodCkrJ3B4IDApJzt9fWZ1bmN0aW9uIHhDb2xvcihlLHMpe2lmKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gJyc7dmFyIGM9Jyc7aWYoZS5zdHlsZSAmJiB4RGVmKGUuc3R5bGUuY29sb3IpKSB7aWYoeFN0cihzKSkgZS5zdHlsZS5jb2xvcj1zO2M9ZS5zdHlsZS5jb2xvcjt9cmV0dXJuIGM7fWZ1bmN0aW9uIHhEZWYoKXtmb3IodmFyIGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyArK2kpe2lmKHR5cGVvZihhcmd1bWVudHNbaV0pPT0ndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO31yZXR1cm4gdHJ1ZTt9ZnVuY3Rpb24geERpc3BsYXkoZSxzKXtpZighKGU9eEdldEVsZW1lbnRCeUlkKGUpKSkgcmV0dXJuIG51bGw7aWYoZS5zdHlsZSAmJiB4RGVmKGUuc3R5bGUuZGlzcGxheSkpIHtpZiAoeFN0cihzKSkgZS5zdHlsZS5kaXNwbGF5ID0gcztyZXR1cm4gZS5zdHlsZS5kaXNwbGF5O31yZXR1cm4gbnVsbDt9ZnVuY3Rpb24geEdldENvbXB1dGVkU3R5bGUob0VsZSwgc1Byb3AsIGJJbnQpe3ZhciBzLCBwID0gJ3VuZGVmaW5lZCc7dmFyIGR2ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXc7aWYoZHYgJiYgZHYuZ2V0Q29tcHV0ZWRTdHlsZSl7cyA9IGR2LmdldENvbXB1dGVkU3R5bGUob0VsZSwnJyk7aWYgKHMpIHAgPSBzLmdldFByb3BlcnR5VmFsdWUoc1Byb3ApO31lbHNlIGlmKG9FbGUuY3VycmVudFN0eWxlKSB7dmFyIGEgPSBzUHJvcC5zcGxpdCgnLScpO3NQcm9wID0gYVswXTtmb3IgKHZhciBpPTE7IGk8YS5sZW5ndGg7ICsraSkge2MgPSBhW2ldLmNoYXJBdCgwKTtzUHJvcCArPSBhW2ldLnJlcGxhY2UoYywgYy50b1VwcGVyQ2FzZSgpKTt9ICAgcCA9IG9FbGUuY3VycmVudFN0eWxlW3NQcm9wXTt9ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gYkludCA/IChwYXJzZUludChwKSB8fCAwKSA6IHA7fWZ1bmN0aW9uIHhHZXRFbGVtZW50QnlJZChlKXtpZih0eXBlb2YoZSkhPSdzdHJpbmcnKSByZXR1cm4gZTtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtlbHNlIGlmKGRvY3VtZW50LmFsbCkgZT1kb2N1bWVudC5hbGxbZV07ZWxzZSBlPW51bGw7cmV0dXJuIGU7fWZ1bmN0aW9uIHhIYXNQb2ludChlLHgseSx0LHIsYixsKXtpZiAoIXhOdW0odCkpe3Q9cj1iPWw9MDt9ZWxzZSBpZiAoIXhOdW0ocikpe3I9Yj1sPXQ7fWVsc2UgaWYgKCF4TnVtKGIpKXtsPXI7IGI9dDt9dmFyIGVYID0geFBhZ2VYKGUpLCBlWSA9IHhQYWdlWShlKTtyZXR1cm4gKHggPj0gZVggKyBsICYmIHggPD0gZVggKyB4V2lkdGgoZSkgLSByICYmeSA+PSBlWSArIHQgJiYgeSA8PSBlWSArIHhIZWlnaHQoZSkgLSBiICk7fWZ1bmN0aW9uIHhIZWlnaHQoZSxoKXtpZighKGU9eEdldEVsZW1lbnRCeUlkKGUpKSkgcmV0dXJuIDA7aWYgKHhOdW0oaCkpIHtpZiAoaDwwKSBoID0gMDtlbHNlIGg9TWF0aC5yb3VuZChoKTt9ZWxzZSBoPS0xO3ZhciBjc3M9eERlZihlLnN0eWxlKTtpZiAoZSA9PSBkb2N1bWVudCB8fCBlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaHRtbCcgfHwgZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2JvZHknKSB7aCA9IHhDbGllbnRIZWlnaHQoKTt9ZWxzZSBpZihjc3MgJiYgeERlZihlLm9mZnNldEhlaWdodCkgJiYgeFN0cihlLnN0eWxlLmhlaWdodCkpIHtpZihoPj0wKSB7dmFyIHB0PTAscGI9MCxidD0wLGJiPTA7aWYgKGRvY3VtZW50LmNvbXBhdE1vZGU9PSdDU1MxQ29tcGF0Jykge3ZhciBnY3MgPSB4R2V0Q29tcHV0ZWRTdHlsZTtwdD1nY3MoZSwncGFkZGluZy10b3AnLDEpO2lmIChwdCAhPT0gbnVsbCkge3BiPWdjcyhlLCdwYWRkaW5nLWJvdHRvbScsMSk7YnQ9Z2NzKGUsJ2JvcmRlci10b3Atd2lkdGgnLDEpO2JiPWdjcyhlLCdib3JkZXItYm90dG9tLXdpZHRoJywxKTt9ZWxzZSBpZih4RGVmKGUub2Zmc2V0SGVpZ2h0LGUuc3R5bGUuaGVpZ2h0KSl7ZS5zdHlsZS5oZWlnaHQ9aCsncHgnO3B0PWUub2Zmc2V0SGVpZ2h0LWg7fX1oLT0ocHQrcGIrYnQrYmIpO2lmKGlzTmFOKGgpfHxoPDApIHJldHVybjtlbHNlIGUuc3R5bGUuaGVpZ2h0PWgrJ3B4Jzt9aD1lLm9mZnNldEhlaWdodDt9ZWxzZSBpZihjc3MgJiYgeERlZihlLnN0eWxlLnBpeGVsSGVpZ2h0KSkge2lmKGg+PTApIGUuc3R5bGUucGl4ZWxIZWlnaHQ9aDtoPWUuc3R5bGUucGl4ZWxIZWlnaHQ7fXJldHVybiBoO31mdW5jdGlvbiB4SGlkZShlKXtyZXR1cm4geFZpc2liaWxpdHkoZSwwKTt9ZnVuY3Rpb24geExlZnQoZSwgaVgpe2lmKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDt2YXIgY3NzPXhEZWYoZS5zdHlsZSk7aWYgKGNzcyAmJiB4U3RyKGUuc3R5bGUubGVmdCkpIHtpZih4TnVtKGlYKSkgZS5zdHlsZS5sZWZ0PWlYKydweCc7ZWxzZSB7aVg9cGFyc2VJbnQoZS5zdHlsZS5sZWZ0KTtpZihpc05hTihpWCkpIGlYPTA7fX1lbHNlIGlmKGNzcyAmJiB4RGVmKGUuc3R5bGUucGl4ZWxMZWZ0KSkge2lmKHhOdW0oaVgpKSBlLnN0eWxlLnBpeGVsTGVmdD1pWDtlbHNlIGlYPWUuc3R5bGUucGl4ZWxMZWZ0O31yZXR1cm4gaVg7fWZ1bmN0aW9uIHhNb3ZlVG8oZSx4LHkpe3hMZWZ0KGUseCk7eFRvcChlLHkpO31mdW5jdGlvbiB4TnVtKCl7Zm9yKHZhciBpPTA7IGk8YXJndW1lbnRzLmxlbmd0aDsgKytpKXtpZihpc05hTihhcmd1bWVudHNbaV0pIHx8IHR5cGVvZihhcmd1bWVudHNbaV0pIT0nbnVtYmVyJykgcmV0dXJuIGZhbHNlO31yZXR1cm4gdHJ1ZTt9ZnVuY3Rpb24geE9mZnNldExlZnQoZSl7aWYgKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDtpZiAoeERlZihlLm9mZnNldExlZnQpKSByZXR1cm4gZS5vZmZzZXRMZWZ0O2Vsc2UgcmV0dXJuIDA7fWZ1bmN0aW9uIHhPZmZzZXRUb3AoZSl7aWYgKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDtpZiAoeERlZihlLm9mZnNldFRvcCkpIHJldHVybiBlLm9mZnNldFRvcDtlbHNlIHJldHVybiAwO31mdW5jdGlvbiB4UGFnZVgoZSl7aWYgKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDt2YXIgeCA9IDA7d2hpbGUgKGUpIHtpZiAoeERlZihlLm9mZnNldExlZnQpKSB4ICs9IGUub2Zmc2V0TGVmdDtlID0geERlZihlLm9mZnNldFBhcmVudCkgPyBlLm9mZnNldFBhcmVudCA6IG51bGw7fXJldHVybiB4O31mdW5jdGlvbiB4UGFnZVkoZSl7aWYgKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDt2YXIgeSA9IDA7d2hpbGUgKGUpIHtpZiAoeERlZihlLm9mZnNldFRvcCkpIHkgKz0gZS5vZmZzZXRUb3A7ZSA9IHhEZWYoZS5vZmZzZXRQYXJlbnQpID8gZS5vZmZzZXRQYXJlbnQgOiBudWxsO31yZXR1cm4geTt9ZnVuY3Rpb24geFBhcmVudChlLCBiTm9kZSl7aWYgKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gbnVsbDt2YXIgcD1udWxsO2lmICghYk5vZGUgJiYgeERlZihlLm9mZnNldFBhcmVudCkpIHA9ZS5vZmZzZXRQYXJlbnQ7ZWxzZSBpZiAoeERlZihlLnBhcmVudE5vZGUpKSBwPWUucGFyZW50Tm9kZTtlbHNlIGlmICh4RGVmKGUucGFyZW50RWxlbWVudCkpIHA9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBwO31mdW5jdGlvbiB4UmVzaXplVG8oZSx3LGgpe3hXaWR0aChlLHcpO3hIZWlnaHQoZSxoKTt9ZnVuY3Rpb24geFNjcm9sbExlZnQoZSwgYldpbil7dmFyIG9mZnNldD0wO2lmICgheERlZihlKSB8fCBiV2luIHx8IGUgPT0gZG9jdW1lbnQgfHwgZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2h0bWwnIHx8IGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdib2R5Jykge3ZhciB3ID0gd2luZG93O2lmIChiV2luICYmIGUpIHcgPSBlO2lmKHcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIHcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpIG9mZnNldD13LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O2Vsc2UgaWYody5kb2N1bWVudC5ib2R5ICYmIHhEZWYody5kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpKSBvZmZzZXQ9dy5kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7fWVsc2Uge2UgPSB4R2V0RWxlbWVudEJ5SWQoZSk7aWYgKGUgJiYgeE51bShlLnNjcm9sbExlZnQpKSBvZmZzZXQgPSBlLnNjcm9sbExlZnQ7fXJldHVybiBvZmZzZXQ7fWZ1bmN0aW9uIHhTY3JvbGxUb3AoZSwgYldpbil7dmFyIG9mZnNldD0wO2lmICgheERlZihlKSB8fCBiV2luIHx8IGUgPT0gZG9jdW1lbnQgfHwgZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2h0bWwnIHx8IGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdib2R5Jykge3ZhciB3ID0gd2luZG93O2lmIChiV2luICYmIGUpIHcgPSBlO2lmKHcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIHcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkgb2Zmc2V0PXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtlbHNlIGlmKHcuZG9jdW1lbnQuYm9keSAmJiB4RGVmKHcuZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKSBvZmZzZXQ9dy5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcDt9ZWxzZSB7ZSA9IHhHZXRFbGVtZW50QnlJZChlKTtpZiAoZSAmJiB4TnVtKGUuc2Nyb2xsVG9wKSkgb2Zmc2V0ID0gZS5zY3JvbGxUb3A7fXJldHVybiBvZmZzZXQ7fWZ1bmN0aW9uIHhTaG93KGUpIHtyZXR1cm4geFZpc2liaWxpdHkoZSwxKTt9ZnVuY3Rpb24geFN0cihzKXtmb3IodmFyIGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyArK2kpe2lmKHR5cGVvZihhcmd1bWVudHNbaV0pIT0nc3RyaW5nJykgcmV0dXJuIGZhbHNlO31yZXR1cm4gdHJ1ZTt9ZnVuY3Rpb24geFRvcChlLCBpWSl7aWYoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJldHVybiAwO3ZhciBjc3M9eERlZihlLnN0eWxlKTtpZihjc3MgJiYgeFN0cihlLnN0eWxlLnRvcCkpIHtpZih4TnVtKGlZKSkgZS5zdHlsZS50b3A9aVkrJ3B4JztlbHNlIHtpWT1wYXJzZUludChlLnN0eWxlLnRvcCk7aWYoaXNOYU4oaVkpKSBpWT0wO319ZWxzZSBpZihjc3MgJiYgeERlZihlLnN0eWxlLnBpeGVsVG9wKSkge2lmKHhOdW0oaVkpKSBlLnN0eWxlLnBpeGVsVG9wPWlZO2Vsc2UgaVk9ZS5zdHlsZS5waXhlbFRvcDt9cmV0dXJuIGlZO31mdW5jdGlvbiB4VmlzaWJpbGl0eShlLCBiU2hvdyl7aWYoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJldHVybiBudWxsO2lmKGUuc3R5bGUgJiYgeERlZihlLnN0eWxlLnZpc2liaWxpdHkpKSB7aWYgKHhEZWYoYlNob3cpKSBlLnN0eWxlLnZpc2liaWxpdHkgPSBiU2hvdyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO3JldHVybiBlLnN0eWxlLnZpc2liaWxpdHk7fXJldHVybiBudWxsO31mdW5jdGlvbiB4V2lkdGgoZSx3KXtpZighKGU9eEdldEVsZW1lbnRCeUlkKGUpKSkgcmV0dXJuIDA7aWYgKHhOdW0odykpIHtpZiAodzwwKSB3ID0gMDtlbHNlIHc9TWF0aC5yb3VuZCh3KTt9ZWxzZSB3PS0xO3ZhciBjc3M9eERlZihlLnN0eWxlKTtpZiAoZSA9PSBkb2N1bWVudCB8fCBlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaHRtbCcgfHwgZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2JvZHknKSB7dyA9IHhDbGllbnRXaWR0aCgpO31lbHNlIGlmKGNzcyAmJiB4RGVmKGUub2Zmc2V0V2lkdGgpICYmIHhTdHIoZS5zdHlsZS53aWR0aCkpIHtpZih3Pj0wKSB7dmFyIHBsPTAscHI9MCxibD0wLGJyPTA7aWYgKGRvY3VtZW50LmNvbXBhdE1vZGU9PSdDU1MxQ29tcGF0Jykge3ZhciBnY3MgPSB4R2V0Q29tcHV0ZWRTdHlsZTtwbD1nY3MoZSwncGFkZGluZy1sZWZ0JywxKTtpZiAocGwgIT09IG51bGwpIHtwcj1nY3MoZSwncGFkZGluZy1yaWdodCcsMSk7Ymw9Z2NzKGUsJ2JvcmRlci1sZWZ0LXdpZHRoJywxKTticj1nY3MoZSwnYm9yZGVyLXJpZ2h0LXdpZHRoJywxKTt9ZWxzZSBpZih4RGVmKGUub2Zmc2V0V2lkdGgsZS5zdHlsZS53aWR0aCkpe2Uuc3R5bGUud2lkdGg9dysncHgnO3BsPWUub2Zmc2V0V2lkdGgtdzt9fXctPShwbCtwcitibCticik7aWYoaXNOYU4odyl8fHc8MCkgcmV0dXJuO2Vsc2UgZS5zdHlsZS53aWR0aD13KydweCc7fXc9ZS5vZmZzZXRXaWR0aDt9ZWxzZSBpZihjc3MgJiYgeERlZihlLnN0eWxlLnBpeGVsV2lkdGgpKSB7aWYodz49MCkgZS5zdHlsZS5waXhlbFdpZHRoPXc7dz1lLnN0eWxlLnBpeGVsV2lkdGg7fXJldHVybiB3O31mdW5jdGlvbiB4WkluZGV4KGUsdVope2lmKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDtpZihlLnN0eWxlICYmIHhEZWYoZS5zdHlsZS56SW5kZXgpKSB7aWYoeE51bSh1WikpIGUuc3R5bGUuekluZGV4PXVaO3VaPXBhcnNlSW50KGUuc3R5bGUuekluZGV4KTt9cmV0dXJuIHVaO30=";s:31:"pointimagewiki/bib/x/x_event.js";s:3852:"LyogeF9ldmVudC5qcyBjb21waWxlZCBmcm9tIFggNC4wIHdpdGggWEMgMC4yN2IuIERpc3RyaWJ1dGVkIGJ5IEdOVSBMR1BMLiBGb3IgY29weXJpZ2h0cywgbGljZW5zZSwgZG9jdW1lbnRhdGlvbiBhbmQgbW9yZSB2aXNpdCBDcm9zcy1Ccm93c2VyLmNvbSAqLw0KZnVuY3Rpb24geEFkZEV2ZW50TGlzdGVuZXIoZSxlVCxlTCxjYXApe2lmKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm47ZVQ9ZVQudG9Mb3dlckNhc2UoKTtpZigoIXhJRTRVcCAmJiAheE9wN1VwKSAmJiBlPT13aW5kb3cpIHtpZihlVD09J3Jlc2l6ZScpIHsgd2luZG93LnhQQ1c9eENsaWVudFdpZHRoKCk7IHdpbmRvdy54UENIPXhDbGllbnRIZWlnaHQoKTsgd2luZG93LnhSRUw9ZUw7IHhSZXNpemVFdmVudCgpOyByZXR1cm47IH1pZihlVD09J3Njcm9sbCcpIHsgd2luZG93LnhQU0w9eFNjcm9sbExlZnQoKTsgd2luZG93LnhQU1Q9eFNjcm9sbFRvcCgpOyB3aW5kb3cueFNFTD1lTDsgeFNjcm9sbEV2ZW50KCk7IHJldHVybjsgfX12YXIgZWg9J2Uub24nK2VUKyc9ZUwnO2lmKGUuYWRkRXZlbnRMaXN0ZW5lcikgZS5hZGRFdmVudExpc3RlbmVyKGVULGVMLGNhcCk7ZWxzZSBpZihlLmF0dGFjaEV2ZW50KSBlLmF0dGFjaEV2ZW50KCdvbicrZVQsZUwpO2Vsc2UgZXZhbChlaCk7fWZ1bmN0aW9uIHhSZXNpemVFdmVudCgpe2lmICh3aW5kb3cueFJFTCkgc2V0VGltZW91dCgneFJlc2l6ZUV2ZW50KCknLCAyNTApO3ZhciBjdyA9IHhDbGllbnRXaWR0aCgpLCBjaCA9IHhDbGllbnRIZWlnaHQoKTtpZiAod2luZG93LnhQQ1cgIT0gY3cgfHwgd2luZG93LnhQQ0ggIT0gY2gpIHsgd2luZG93LnhQQ1cgPSBjdzsgd2luZG93LnhQQ0ggPSBjaDsgaWYgKHdpbmRvdy54UkVMKSB3aW5kb3cueFJFTCgpOyB9fWZ1bmN0aW9uIHhTY3JvbGxFdmVudCgpe2lmICh3aW5kb3cueFNFTCkgc2V0VGltZW91dCgneFNjcm9sbEV2ZW50KCknLCAyNTApO3ZhciBzbCA9IHhTY3JvbGxMZWZ0KCksIHN0ID0geFNjcm9sbFRvcCgpO2lmICh3aW5kb3cueFBTTCAhPSBzbCB8fCB3aW5kb3cueFBTVCAhPSBzdCkgeyB3aW5kb3cueFBTTCA9IHNsOyB3aW5kb3cueFBTVCA9IHN0OyBpZiAod2luZG93LnhTRUwpIHdpbmRvdy54U0VMKCk7IH19ZnVuY3Rpb24geEV2ZW50KGV2dCkge3ZhciBlID0gZXZ0IHx8IHdpbmRvdy5ldmVudDtpZighZSkgcmV0dXJuO2lmKGUudHlwZSkgdGhpcy50eXBlID0gZS50eXBlO2lmKGUudGFyZ2V0KSB0aGlzLnRhcmdldCA9IGUudGFyZ2V0O2Vsc2UgaWYoZS5zcmNFbGVtZW50KSB0aGlzLnRhcmdldCA9IGUuc3JjRWxlbWVudDtpZiAoZS5yZWxhdGVkVGFyZ2V0KSB0aGlzLnJlbGF0ZWRUYXJnZXQgPSBlLnJlbGF0ZWRUYXJnZXQ7ZWxzZSBpZiAoZS50eXBlID09ICdtb3VzZW92ZXInICYmIGUuZnJvbUVsZW1lbnQpIHRoaXMucmVsYXRlZFRhcmdldCA9IGUuZnJvbUVsZW1lbnQ7ZWxzZSBpZiAoZS50eXBlID09ICdtb3VzZW91dCcpIHRoaXMucmVsYXRlZFRhcmdldCA9IGUudG9FbGVtZW50O2lmKHhPcDZEbikgeyB0aGlzLnBhZ2VYID0gZS5jbGllbnRYOyB0aGlzLnBhZ2VZID0gZS5jbGllbnRZOyB9ZWxzZSBpZih4RGVmKGUucGFnZVgsZS5wYWdlWSkpIHsgdGhpcy5wYWdlWCA9IGUucGFnZVg7IHRoaXMucGFnZVkgPSBlLnBhZ2VZOyB9ZWxzZSBpZih4RGVmKGUuY2xpZW50WCxlLmNsaWVudFkpKSB7IHRoaXMucGFnZVggPSBlLmNsaWVudFggKyB4U2Nyb2xsTGVmdCgpOyB0aGlzLnBhZ2VZID0gZS5jbGllbnRZICsgeFNjcm9sbFRvcCgpOyB9aWYgKHhEZWYoZS5vZmZzZXRYLGUub2Zmc2V0WSkpIHt0aGlzLm9mZnNldFggPSBlLm9mZnNldFg7dGhpcy5vZmZzZXRZID0gZS5vZmZzZXRZO31lbHNlIGlmICh4RGVmKGUubGF5ZXJYLGUubGF5ZXJZKSkge3RoaXMub2Zmc2V0WCA9IGUubGF5ZXJYO3RoaXMub2Zmc2V0WSA9IGUubGF5ZXJZO31lbHNlIHt0aGlzLm9mZnNldFggPSB0aGlzLnBhZ2VYIC0geFBhZ2VYKHRoaXMudGFyZ2V0KTt0aGlzLm9mZnNldFkgPSB0aGlzLnBhZ2VZIC0geFBhZ2VZKHRoaXMudGFyZ2V0KTt9aWYgKGUua2V5Q29kZSkgeyB0aGlzLmtleUNvZGUgPSBlLmtleUNvZGU7IH0gZWxzZSBpZiAoeERlZihlLndoaWNoKSAmJiBlLnR5cGUuaW5kZXhPZigna2V5JykhPS0xKSB7IHRoaXMua2V5Q29kZSA9IGUud2hpY2g7IH10aGlzLnNoaWZ0S2V5ID0gZS5zaGlmdEtleTt0aGlzLmN0cmxLZXkgPSBlLmN0cmxLZXk7dGhpcy5hbHRLZXkgPSBlLmFsdEtleTt9ZnVuY3Rpb24geFByZXZlbnREZWZhdWx0KGUpe2lmIChlICYmIGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGlmICh3aW5kb3cuZXZlbnQpIHdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO31mdW5jdGlvbiB4UmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGVULGVMLGNhcCl7aWYoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJldHVybjtlVD1lVC50b0xvd2VyQ2FzZSgpO2lmKCgheElFNFVwICYmICF4T3A3VXApICYmIGU9PXdpbmRvdykge2lmKGVUPT0ncmVzaXplJykgeyB3aW5kb3cueFJFTD1udWxsOyByZXR1cm47IH1pZihlVD09J3Njcm9sbCcpIHsgd2luZG93LnhTRUw9bnVsbDsgcmV0dXJuOyB9fXZhciBlaD0nZS5vbicrZVQrJz1udWxsJztpZihlLnJlbW92ZUV2ZW50TGlzdGVuZXIpIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihlVCxlTCxjYXApO2Vsc2UgaWYoZS5kZXRhY2hFdmVudCkgZS5kZXRhY2hFdmVudCgnb24nK2VULGVMKTtlbHNlIGV2YWwoZWgpO31mdW5jdGlvbiB4U3RvcFByb3BhZ2F0aW9uKGV2dCl7aWYgKGV2dCAmJiBldnQuc3RvcFByb3BhZ2F0aW9uKSBldnQuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZiAod2luZG93LmV2ZW50KSB3aW5kb3cuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTt9";s:23:"pointimagewiki/desc.xml";s:324:"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8cGx1Z2luIG5hbWU9IndrcG9pbnRpbWFnZXdpa2kiIHZlcnNpb249IjAuMSIgYWN0aXZlPSIxIj4KICA8YXV0aG9yPkRhdmlkIERlbG9uPC9hdXRob3I+CiAgPGxhYmVsPlBvaW50SW1hZ2VXaWtpPC9sYWJlbD4KICA8ZGVzYz5TYWlzaWUgZXQgYWZmaWNoYWdlIHBvaW50IHN1ciB1bmUgaW1hZ2UgcG91ciBXaWtpbmk8L2Rlc2M+CjwvcGx1Z2luPg==";s:24:"pointimagewiki/index.php";s:412:"PD9waHAKLy8gaW5kZXgucGhwCi8vIEFkbWluaXN0cmF0aW9uIGRlIGwnZXh0ZW5zaW9uIDogaW5pdGlhbGlzYXRpb25zICh0YWJsZXMsIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbikgLCBpbmZvcm1hdGlvbiBldGMuIDogdG91dGVzCi8vIG9w6XJhdGlvbnMgculzZXJ26WVzIOAgbCdhZG1pbmlzdHJhdGV1ciB0ZWNobmlxdWUgZGUgV2lraW5pLgoKLy8gVulyaWZpY2F0aW9uIGRlIHPpY3VyaXTpCmlmICghZGVmaW5lZCgiVE9PTFNfTUFOQUdFUiIpKQp7CiAgICAgICAgZGllICgiYWNjJmVncmF2ZTtzIGRpcmVjdCBpbnRlcmRpdCIpOwp9CgoK";s:23:"pointimagewiki/wiki.php";s:148:"PD9waHAKLy8gUGFydGllIHB1YmxpcXVlIAoKaWYgKCFkZWZpbmVkKCJXSUtJTklfVkVSU0lPTiIpKQp7CiAgICAgICAgZGllICgiYWNjJmVncmF2ZTtzIGRpcmVjdCBpbnRlcmRpdCIpOwp9Cgo=";}}