# upm_file_popper v.0.2 # An easy-to-use file picker, for use with upm_file. # Mary Fredborg # http://utterplush.com/txp-plugins/upm_file_popper # .......................................................................... # A plugin for Textpattern # http://textpattern.com/ # # Adding Plugins to Your Textpattern Installation # http://textpattern.net/wiki/index.php?title=Intermediate_Weblog_Model#Adding_Plugins_to_Your_Textpattern_Installation # .......................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJ1cG1fZmlsZV9wb3BwZXIiO3M6MTE6ImRlc2NyaXB0 aW9uIjtzOjUwOiJBbiBlYXN5LXRvLXVzZSBmaWxlIHBpY2tlciwgZm9yIHVzZSB3aXRoIHVw bV9maWxlLiI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMiI7czo0OiJ0eXBlIjtpOjE7czo2OiJh dXRob3IiO3M6MTM6Ik1hcnkgRnJlZGJvcmciO3M6MTA6ImF1dGhvcl91cmkiO3M6NDk6Imh0 dHA6Ly91dHRlcnBsdXNoLmNvbS90eHAtcGx1Z2lucy91cG1fZmlsZV9wb3BwZXIiO3M6NDoi Y29kZSI7czoxNTk1OToiaWYgKHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKQoJewoJCWFkZF9w cml2cygndXBtX2ZpbGVfcG9wcGVyJywgJzEsMiwzLDQsNScpOwoJCXJlZ2lzdGVyX2NhbGxi YWNrKCd1cG1fZmlsZV9wb3BwZXInLCAndXBtX2ZpbGVfcG9wcGVyJyk7CgoJCWFkZF9wcml2 cygndXBtX2ZpbGVfcG9wcGVyX2xpbmsnLCAnMSwyLDMsNCw1Jyk7CgkJcmVnaXN0ZXJfY2Fs bGJhY2soJ3VwbV9maWxlX3BvcHBlcl9saW5rJywgJ2FydGljbGUnKTsKCgkJYWRkX3ByaXZz KCd1cG1fZmlsZV9wb3BwZXJfanMnLCAnMSwyLDMsNCw1Jyk7CgkJcmVnaXN0ZXJfY2FsbGJh Y2soJ3VwbV9maWxlX3BvcHBlcl9qcycsICd1cG1fZmlsZV9wb3BwZXJfanMnLCAnJywgMSk7 CgoJCWFkZF9wcml2cygndXBtX2ZpbGVfcG9wcGVyX2ltZycsICcxLDIsMyw0LDUnKTsKCQly ZWdpc3Rlcl9jYWxsYmFjaygndXBtX2ZpbGVfcG9wcGVyX2ltZycsICd1cG1fZmlsZV9wb3Bw ZXJfaW1nJywgJycsIDEpOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9maWxlX3Bv cHBlcigpCgl7CgkJZ2xvYmFsICRzdGVwLCAkcHJlZnM7CgoJCWlmICgkc3RlcCA9PSAndXBt X2ZpbGVfcG9wcGVyX2NoYW5nZV9wYWdlYnknKQoJCXsKCQkJZXZlbnRfY2hhbmdlX3BhZ2Vi eSgnZmlsZScpOwoJCQkkR0xPQkFMU1sncHJlZnMnXSA9IGdldF9wcmVmcygpOwoJCX0KCgkJ dXBtX2ZpbGVfcG9wcGVyX2xpc3QoKTsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1f ZmlsZV9wb3BwZXJfbGlzdCgpCgl7CgkJZ2xvYmFsICRmaWxlX2Jhc2VfcGF0aCwgJHByZWZz OwoKCQlwYWdldG9wKHVwbV9maWxlX3BvcHBlcl9nVHh0KCdmaWxlX3NlbGVjdG9yJykpOwoK CWVjaG8gPDw8Y3NzCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CjwhLS0KbGFiZWwgewpjdXJz b3I6IHBvaW50ZXI7CmNvbG9yOiAjMDAwOwp9CgppbWcgewpib3JkZXI6IG5vbmU7Cn0KCnVs IHsKbWFyZ2luOiAwOwpwYWRkaW5nOiAwOwpsaXN0LXN0eWxlOiBub25lOwp9CgpsaSB7Cm1h cmdpbjogMCAwIDJweCAwOwpwYWRkaW5nOiAwOwp9CgpwIHsKbWFyZ2luOiA1cHggMDsKcGFk ZGluZzogMDsKfQoKLnJpZ2h0IHsKdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCi5jZW50ZXIgewpt YXJnaW46IDAgYXV0bzsKdGV4dC1hbGlnbjogY2VudGVyOwp9Cgojbm8gewptYXJnaW4tbGVm dDogMmVtOwp9CgojcmV0dXJuLCAjc3VjY2VzcywgI2ZhaWxlZCB7CnBhZGRpbmc6IDFlbTsK dGV4dC1hbGlnbjogY2VudGVyOwpiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwpib3JkZXI6IDVw eCBzb2xpZCAjZmMzOwp9Ci0tPgo8L3N0eWxlPgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiIHNyYz0iaW5kZXgucGhwP2V2ZW50PXVwbV9maWxlX3BvcHBlcl9qcyYjMzg7bmFt ZT1wb3AiPjwvc2NyaXB0Pgpjc3M7CgoJCWV4dHJhY3QoZ3BzYShhcnJheSgncGFnZScsICdz b3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkpOwoKCQkkZGlyID0gKCRk aXIgPT0gJ2Rlc2MnKSA/ICdkZXNjJyA6ICdhc2MnOwoKCQlzd2l0Y2ggKCRzb3J0KQoJCXsK CQkJY2FzZSAnaWQnOgoJCQkJJHNvcnRfc3FsID0gImlkICRkaXIsIGZpbGVuYW1lIGFzYyI7 CgkJCWJyZWFrOwoKCQkJY2FzZSAnZmlsZW5hbWUnOgoJCQkJJHNvcnRfc3FsID0gImZpbGVu YW1lICRkaXIiOwoJCQlicmVhazsKCgkJCWNhc2UgJ2Rlc2NyaXB0aW9uJzoKCQkJCSRzb3J0 X3NxbCA9ICdkZXNjcmlwdGlvbiAnLiRkaXIuJywgZmlsZW5hbWUgZGVzYyc7CgkJCWJyZWFr OwoKCQkJY2FzZSAnY2F0ZWdvcnknOgoJCQkJJHNvcnRfc3FsID0gImNhdGVnb3J5ICRkaXIs IGZpbGVuYW1lIGFzYyI7CgkJCWJyZWFrOwoKCQkJY2FzZSAnZG93bmxvYWRzJzoKCQkJCSRz b3J0X3NxbCA9ICJkb3dubG9hZHMgJGRpciwgZmlsZW5hbWUgYXNjIjsKCQkJYnJlYWs7CgoJ CQlkZWZhdWx0OgoJCQkJJGRpciA9ICdkZXNjJzsKCQkJCSRzb3J0X3NxbCA9ICJmaWxlbmFt ZSAkZGlyIjsKCQkJYnJlYWs7CgkJfQoKCQkkc3dpdGNoX2RpciA9ICgkZGlyID09ICdkZXNj JykgPyAnYXNjJyA6ICdkZXNjJzsKCgkJJGNyaXRlcmlhID0gMTsKCgkJaWYgKCRzZWFyY2hf bWV0aG9kIGFuZCAkY3JpdCkKCQl7CgkJCSRjcml0X2VzY2FwZWQgPSBkb1NsYXNoKCRjcml0 KTsKCgkJCSRjcml0c3FsID0gYXJyYXkoCgkJCQknaWQnCQkJCQk9PiAiaWQgPSAnJGNyaXRf ZXNjYXBlZCciLAoJCQkJJ2ZpbGVuYW1lJwkJPT4gImZpbGVuYW1lIGxpa2UgJyUkY3JpdF9l c2NhcGVkJSciLAoJCQkJJ2NhdGVnb3J5JwkJPT4gImNhdGVnb3J5IGxpa2UgJyUkY3JpdF9l c2NhcGVkJSciLAoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAiZGVzY3JpcHRpb24gbGlrZSAnJSRj cml0X2VzY2FwZWQlJyIKCQkJKTsKCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRzZWFyY2hf bWV0aG9kLCAkY3JpdHNxbCkpCgkJCXsKCQkJCSRjcml0ZXJpYSA9ICRjcml0c3FsWyRzZWFy Y2hfbWV0aG9kXTsKCQkJCSRsaW1pdCA9IDUwMDsKCQkJfQoKCQkJZWxzZQoJCQl7CgkJCQkk c2VhcmNoX21ldGhvZCA9ICcnOwoJCQkJJGNyaXQgPSAnJzsKCQkJfQoJCX0KCgkJZWxzZQoJ CXsKCQkJJHNlYXJjaF9tZXRob2QgPSAnJzsKCQkJJGNyaXQgPSAnJzsKCQl9CgoJCSR0b3Rh bCA9IHNhZmVfY291bnQoJ3R4cF9maWxlJywgIiRjcml0ZXJpYSIpOwoKCQlpZiAoJHRvdGFs IDwgMSkKCQl7CgkJCWlmICgkY3JpdGVyaWEgIT0gMSkKCQkJewoJCQkJZWNobyBuLnVwbV9m aWxlX3BvcHBlcl9zZWFyY2hfZm9ybSgkY3JpdCwgJHNlYXJjaF9tZXRob2QsICRzb3J0LCAk ZGlyKS4KCQkJCQluLmdyYWYoZ1R4dCgnbm9fcmVzdWx0c19mb3VuZCcpLCAnIHN0eWxlPSJ0 ZXh0LWFsaWduOiBjZW50ZXI7IicpOwoJCQl9CgoJCQllbHNlCgkJCXsKCQkJCWVjaG8gbi5n cmFmKGdUeHQoJ25vX2ZpbGVzX3JlY29yZGVkJyksICcgc3R5bGU9InRleHQtYWxpZ246IGNl bnRlcjsiJyk7CgkJCX0KCgkJCXJldHVybjsKCQl9CgoJCSRsaW1pdCA9IG1heCgkcHJlZnNb J2ZpbGVfbGlzdF9wYWdlYnknXSwgMTUpOwoKCQlsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVt UGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsKCgkJZWNobyB1cG1fZmls ZV9wb3BwZXJfc2VhcmNoX2Zvcm0oJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAkc29ydCwgJGRp cik7CgoJCSRycyA9IHNhZmVfcm93c19zdGFydCgnKicsICd0eHBfZmlsZScsICIkY3JpdGVy aWEgb3JkZXIgYnkgJHNvcnRfc3FsIGxpbWl0ICRvZmZzZXQsICRsaW1pdCIpOwoKCQlpZiAo JHJzKQoJCXsKCQkJJHNvcnRfbGluayA9ICd1cG1fZmlsZV9wb3BwZXInLmEuJ2JtPXRydWUn OwoKCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0JyksCgkJCQl0cigKCQkJCQljb2x1bW5faGVh ZCgnSUQnLCAnaWQnLCAkc29ydF9saW5rLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRz ZWFyY2hfbWV0aG9kKS4KCQkJCQljb2x1bW5faGVhZCgnZmlsZV9uYW1lJywgJ2ZpbGVuYW1l JywgJHNvcnRfbGluaywgdHJ1ZSwJJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhv ZCkuCgkJCQkJY29sdW1uX2hlYWQoJ2Rlc2NyaXB0aW9uJywgJ2Rlc2NyaXB0aW9uJywgJHNv cnRfbGluaywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCkuCgkJ CQkJY29sdW1uX2hlYWQoJ2ZpbGVfY2F0ZWdvcnknLCAnY2F0ZWdvcnknLCAkc29ydF9saW5r LCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCQkJCQloQ2Vs bCgpLgoJCQkJCWhDZWxsKGdUeHQoJ3RhZ3MnKSkuCgkJCQkJaENlbGwoZ1R4dCgnc3RhdHVz JykpLgoJCQkJCWNvbHVtbl9oZWFkKCdkb3dubG9hZHMnLCAnZG93bmxvYWRzJywgJHNvcnRf bGluaywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCkKCQkJCSk7 CgoJCQl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpCgkJCXsKCQkJCWV4dHJhY3QoJGEpOwoK CQkJCS8vIGdvZCBJIGhhdGUgamF2YXNjcmlwdCBpbiBwaHAKCQkJCSRpbnNlcnQgPSAnPGEg aHJlZj0iIyIgb25jbGljaz0iYXR0YWNoRmlsZSgnLmNocigzOSkuJGlkLmNocigzOSkuJyk7 IHJldHVybiBmYWxzZTsiPjxpbWcgc3JjPSJpbmRleC5waHA/ZXZlbnQ9dXBtX2ZpbGVfcG9w cGVyX2ltZyIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgYWx0PSInLnVwbV9maWxlX3Bv cHBlcl9nVHh0KCdhdHRhY2hfZmlsZScpLiciIHRpdGxlPSInLnVwbV9maWxlX3BvcHBlcl9n VHh0KCdhdHRhY2hfZmlsZScpLiciIC8+PC9hPic7CgoJCQkJJHRhZ191cmwgPSAnP2V2ZW50 PXRhZycuYS4ndGFnX25hbWU9ZmlsZV9kb3dubG9hZF9saW5rJy5hLidpZD0nLiRpZC5hLidk ZXNjcmlwdGlvbj0nLnVybGVuY29kZSgkZGVzY3JpcHRpb24pLgoJCQkJCWEuJ2ZpbGVuYW1l PScudXJsZW5jb2RlKCRmaWxlbmFtZSk7CgoJCQkJJGZpbGVfZXhpc3RzID0gZmlsZV9leGlz dHMoYnVpbGRfZmlsZV9wYXRoKCRmaWxlX2Jhc2VfcGF0aCwgJGZpbGVuYW1lKSk7CgoJCQkJ JHN0YXR1cyA9ICgkZmlsZV9leGlzdHMpID8KCQkJCQknPHNwYW4gY2xhc3M9Im9rIj4nLmdU eHQoJ2ZpbGVfc3RhdHVzX29rJykuJzwvc3Bhbj4nIDoKCQkJCQknPHNwYW4gY2xhc3M9Im5v dC1vayI+Jy5nVHh0KCdmaWxlX3N0YXR1c19taXNzaW5nJykuJzwvc3Bhbj4nOwoKCQkJCWlm ICghaXNzZXQoJGRvd25sb2FkcykpCgkJCQl7CgkJCQkJc2FmZV9hbHRlcigndHhwX2ZpbGUn LCAiQUREIGRvd25sb2FkcyBJTlQgREVGQVVMVCAnMCcgTk9UIE5VTEwiKTsKCQkJCQkkZG93 bmxvYWRzID0gMDsKCQkJCX0KCgkJCQllbHNlaWYgKGVtcHR5KCRkb3dubG9hZHMpKQoJCQkJ ewoJCQkJCSRkb3dubG9hZHMgPSAnMCc7CgkJCQl9CgoKCQkJCWVjaG8gbi5uLnRyKAoKCQkJ CQluLnRkKCRpZCkuCgoJCQkJCXRkKCc8YSBocmVmPSIjIiBvbmNsaWNrPSJ3YXJuRWRpdEZp bGUoJy4kaWQuJyk7IHJldHVybiBmYWxzZTsiPicuJGZpbGVuYW1lLic8L2E+JywgMTI1KS4K CgkJCQkJdGQoJGRlc2NyaXB0aW9uLCAxNTApLgoJCQkJCXRkKCRjYXRlZ29yeSwgOTApLgoK CQkJCQl0ZCgkaW5zZXJ0KS4KCgkJCQkJdGQoCgkJCQkJCW4uJzx1bD4nLgoJCQkJCQluLnQu JzxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJy4kdGFnX3VybC5hLid0eXBlPXRleHRp bGUiIG9uY2xpY2s9InBvcFdpbih0aGlzLmhyZWYsIDQwMCwgMjUwKTsgcmV0dXJuIGZhbHNl OyI+VGV4dGlsZTwvYT48L2xpPicuCgkJCQkJCW4udC4nPGxpPjxhIHRhcmdldD0iX2JsYW5r IiBocmVmPSInLiR0YWdfdXJsLmEuJ3R5cGU9dGV4dHBhdHRlcm4iIG9uY2xpY2s9InBvcFdp bih0aGlzLmhyZWYsIDQwMCwgMjUwKTsgcmV0dXJuIGZhbHNlOyI+VGV4dHBhdHRlcm48L2E+ PC9saT4nLgoJCQkJCQluLnQuJzxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJy4kdGFn X3VybC5hLid0eXBlPXhodG1sIiBvbmNsaWNrPSJwb3BXaW4odGhpcy5ocmVmLCA0MDAsIDI1 MCk7IHJldHVybiBmYWxzZTsiPlhIVE1MPC9hPjwvbGk+Jy4KCQkJCQkJbi4nPC91bD4nCgkJ CQkJLCA3NSkuCgoJCQkJCXRkKCRzdGF0dXMsIDQ1KS4KCgkJCQkJdGQoCgkJCQkJCSgkZG93 bmxvYWRzID09ICcwJyA/IGdUeHQoJ25vbmUnKSA6ICRkb3dubG9hZHMpCgkJCQkJLCAyNSkK CQkJCSk7CgkJCX0KCgkJCWVjaG8gZW5kVGFibGUoKS4KCgkJCQluYXZfZm9ybSgndXBtX2Zp bGVfcG9wcGVyJywgJHBhZ2UsICRudW1QYWdlcywgJHNvcnQsICRkaXIsICRjcml0LCAkc2Vh cmNoX21ldGhvZCkuCgoJCQkJdXBtX2ZpbGVfcG9wcGVyX3BhZ2VieV9mb3JtKCkuCgoJCQkJ bi50YWcoCgkJCQkJbi5ncmFmKHVwbV9maWxlX3BvcHBlcl9nVHh0KCdyZXR1cm4nKSkuCgkJ CQkJbi5ncmFmKCc8YSBpZD0ieWVzIiBocmVmPSIjIiBvbmNsaWNrPSJnb0JhY2sodGhpcy5o cmVmKTsgcmV0dXJuIGZhbHNlOyI+Jy5nVHh0KCd5ZXMnKS4nPC9hPi4nLgoJCQkJCQknIDxh IGlkPSJubyIgaHJlZj0iIyIgb25jbGljaz0iZG9uZShcJ3JldHVyblwnKTsgcmV0dXJuIGZh bHNlOyI+Jy5nVHh0KCdubycpLic8L2E+LicpCgkJCQksICdkaXYnLAknIGlkPSJyZXR1cm4i IHN0eWxlPSJkaXNwbGF5OiBub25lOyB3aWR0aDogMjAwcHg7IGhlaWdodDogNzVweDsiJyku CgoJCQkJbi5ncmFmKHVwbV9maWxlX3BvcHBlcl9nVHh0KCdzdWNjZXNzJyksICcgaWQ9InN1 Y2Nlc3MiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB3aWR0aDogMTUwcHg7IGhlaWdodDogMzVw eDsiJykuCgkJCQluLmdyYWYodXBtX2ZpbGVfcG9wcGVyX2dUeHQoJ2ZhaWxlZCcpLCAnIGlk PSJmYWlsZWQiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB3aWR0aDogMTUwcHg7IGhlaWdodDog MzVweDsiJyk7CgkJfQoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9maWxlX3BvcHBl cl9zZWFyY2hfZm9ybSgkY3JpdCwgJG1ldGhvZCwgJHNvcnQsICRkaXIpCgl7CgkJJGRlZmF1 bHRfbWV0aG9kID0gJ2ZpbGVuYW1lJzsKCgkJJG1ldGhvZCA9ICgkbWV0aG9kKSA/ICRtZXRo b2QgOiAkZGVmYXVsdF9tZXRob2Q7CgoJCSRtZXRob2RzID0JYXJyYXkoCgkJCSdpZCcJCQkJ CT0+IGdUeHQoJ2lkJyksCgkJCSdmaWxlbmFtZScJCT0+IGdUeHQoJ2ZpbGVfbmFtZScpLAoJ CQknZGVzY3JpcHRpb24nID0+IGdUeHQoJ2Rlc2NyaXB0aW9uJyksCgkJCSdjYXRlZ29yeScJ CT0+IGdUeHQoJ2ZpbGVfY2F0ZWdvcnknKQoJCSk7CgoJCXJldHVybiBuLm4uJzxmb3JtIG1l dGhvZD0iZ2V0IiBhY3Rpb249ImluZGV4LnBocCIgc3R5bGU9Im1hcmdpbjogYXV0bzsgdGV4 dC1hbGlnbjogY2VudGVyOyI+Jy4KCQkJZ3JhZigKCQkJCSc8bGFiZWwgZm9yPSJ1cG0tZmls ZS1wb3BwZXItc2VhcmNoIj4nLmdUeHQoJ3NlYXJjaCcpLic8L2xhYmVsPicuc3AuCgkJCQlz ZWxlY3RJbnB1dCgnc2VhcmNoX21ldGhvZCcsICRtZXRob2RzLCAkbWV0aG9kLCAnJywgJycs ICd1cG0tZmlsZS1wb3BwZXItc2VhcmNoJykuc3AuCgkJCQlmSW5wdXQoJ3RleHQnLCAnY3Jp dCcsICRjcml0LCAnZWRpdCcsICcnLCAnJywgJzE1JykuCgkJCQllSW5wdXQoJ3VwbV9maWxl X3BvcHBlcicpLgoJCQkJaElucHV0KCdibScsJ3RydWUnKS4KCQkJCWZJbnB1dCgnc3VibWl0 JywgJ3NlYXJjaCcsIGdUeHQoJ2dvJyksICdzbWFsbGVyYm94JykKCQkJKS4KCgkJCSgkY3Jp dCA/IG4uZ3JhZignPGEgaHJlZj0iP2V2ZW50PXVwbV9maWxlX3BvcHBlcicuYS4nYm09dHJ1 ZSI+Jy51cG1fZmlsZV9wb3BwZXJfZ1R4dCgndmlld19hbGwnKS4nPC9hPicpIDogJycpLgoK CQluLic8L2Zvcm0+JzsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1fZmlsZV9wb3Bw ZXJfcGFnZWJ5X2Zvcm0oKQoJewoJCWdsb2JhbCAkcHJlZnM7CgoJCSR2YWxzID0gYXJyYXko CgkJCTE1CT0+IDE1LAoJCQkyNQk9PiAyNSwKCQkJNTAJPT4gNTAsCgkJCTEwMCA9PiAxMDAK CQkpOwoKCQkkc2VsZWN0X3BhZ2UgPSBzZWxlY3RJbnB1dCgncXR5JywgJHZhbHMsICRwcmVm c1snZmlsZV9saXN0X3BhZ2VieSddLCAnJywgMSk7CgoJCS8vIHByb3BlciBsb2NhbGlzYXRp b24KCQkkcGFnZSA9IHN0cl9yZXBsYWNlKCd7cGFnZX0nLCAkc2VsZWN0X3BhZ2UsIGdUeHQo J3ZpZXdfcGVyX3BhZ2UnKSk7CgoJCXJldHVybiBmb3JtKAoJCQknPGRpdiBzdHlsZT0ibWFy Z2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4nLgoJCQkJJHBhZ2UuCgkJCQllSW5w dXQoJ3VwbV9maWxlX3BvcHBlcicpLgoJCQkJc0lucHV0KCd1cG1fZmlsZV9wb3BwZXJfY2hh bmdlX3BhZ2VieScpLgoJCQkJaElucHV0KCdibScsICcxJykuCgkJCQknPG5vc2NyaXB0PiA8 aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJy5nVHh0KCdnbycpLiciIGNsYXNzPSJzbWFs bGVyYm94IiAvPjwvbm9zY3JpcHQ+Jy4KCQkJJzwvZGl2PicKCQkpOwoJfQoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoKCWZ1bmN0aW9uIHVwbV9maWxlX3BvcHBlcl9saW5rKCkKCXsKCQkkdmlldyA9IGdwcygn dmlldycpOwoKCQlpZiAoJHZpZXcgPT0gJ3RleHQnIG9yIGVtcHR5KCR2aWV3KSkKCQl7CgkJ CWVjaG8gPDw8Zm9ybQoKPGZvcm0gYWN0aW9uPSIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBp ZD0idXBtX2ZpbGVfcG9wcGVyX3N0YXJ0IiB2YWx1ZT0iIj4KPC9mb3JtPgoKPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaW5kZXgucGhwP2V2ZW50PXVwbV9maWxlX3Bv cHBlcl9qcyYjMzg7bmFtZT1saW5rIj48L3NjcmlwdD4KZm9ybTsKCQl9Cgl9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCgoJZnVuY3Rpb24gdXBtX2ZpbGVfcG9wcGVyX2pzKCkKCXsKCQlnbG9iYWwgJHByZWZz OwoKCQl3aGlsZSAoQG9iX2VuZF9jbGVhbigpKTsKCgkJJHVwbV9maWxlX2ZpZWxkID0gJHBy ZWZzWyd1cG1fZmlsZV9maWVsZCddOwoKCQlpZiAoZ3BzKCduYW1lJykgPT0gJ2xpbmsnKQoJ CXsKCQkJZ2xvYmFsICR1c2VfdGV4dGlsZTsKCgkJCSR1cG1fZmlsZV9maWVsZCA9IHN0cl9y ZXBsYWNlKCdfJywgJy0nLCAkdXBtX2ZpbGVfZmllbGQpOwoKCQkJJHR4dCA9IGdUeHQoJ2Fk dmFuY2VkX29wdGlvbnMnKTsKCgkJCSRsYW5nX2F0dGFjaF9maWxlID0gdXBtX2ZpbGVfcG9w cGVyX2dUeHQoJ2F0dGFjaF9maWxlJyk7CgkJCSRsYW5nX2ZvcmdvdF9maWVsZCA9IHVwbV9m aWxlX3BvcHBlcl9nVHh0KCdmb3Jnb3RfZmllbGQnKTsKCgkJCWhlYWRlcigiQ29udGVudC10 eXBlOiB0ZXh0L2phdmFzY3JpcHQiKTsKCgkJCWVjaG8gPDw8anMKCglpZiAoIWRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCckdXBtX2ZpbGVfZmllbGQnKSkKCXsKCQlhbGVydCgnJGxhbmdf Zm9yZ290X2ZpZWxkJyk7Cgl9CgoJZWxzZQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCd1cG1fZmlsZV9wb3BwZXJfc3RhcnQnKS52YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCdib2R5JykudmFsdWU7CgoJCXZhciB0eHQgPSAnJHR4dCc7CgoJCXZhciB1cG1fZmls ZV9wb3BwZXIgPSBmYWxzZTsKCgkJdmFyIGEgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5T KSA/CgkJCWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5 OS94aHRtbCcsICdhJykgOgoJCQlkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CgoJCWEu YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyRsYW5nX2F0dGFjaF9maWxl JykpOwoKCQl2YXIgdyA9IDUyNTsKCQl2YXIgaCA9IDM3NTsKCgkJdmFyIHQgPSAoc2NyZWVu LmhlaWdodCkgPyAoc2NyZWVuLmhlaWdodCAtIGgpIC8gMiA6IDA7CgkJdmFyIGwgPSAoc2Ny ZWVuLndpZHRoKSA/IChzY3JlZW4ud2lkdGggLSB3KSAvIDIgOiAwOwoKCQlhLnNldEF0dHJp YnV0ZSgnb25jbGljaycsICJ2YXIgdXBtX2ZpbGVfcG9wcGVyID0gd2luZG93Lm9wZW4odGhp cy5ocmVmLCAndXBtX2ZpbGVfcG9wcGVyJywgJ3RvcCA9ICIrdCsiLCBsZWZ0ID0gIitsKyIs IHdpZHRoID0gIit3KyIsIGhlaWdodCA9ICIraCsiLCB0b29sYmFyID0gbm8sIGxvY2F0aW9u ID0gbm8sIGRpcmVjdG9yaWVzID0gbm8sIHN0YXR1cyA9IHllcywgbWVudWJhciA9IG5vLCBz Y3JvbGxiYXJzID0geWVzLCBjb3B5aGlzdG9yeSA9IG5vLCByZXNpemFibGUgPSB5ZXMnKTsg dXBtX2ZpbGVfcG9wcGVyLmZvY3VzKCk7IHJldHVybiBmYWxzZTsiKTsKCQlhLnNldEF0dHJp YnV0ZSgndGFyZ2V0JywgJ2JsYW5rJyk7CgkJYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnP2V2 ZW50PXVwbV9maWxlX3BvcHBlclx1MDAyNmJtPXRydWUnKTsKCgkJdmFyIGxpbmsgPSAoZG9j dW1lbnQuY3JlYXRlRWxlbWVudE5TKSA/CgkJCWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygn aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdoMycpIDoKCQkJZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnaDMnKTsKCgkJbGluay5zZXRBdHRyaWJ1dGUoJ2NsYXNzTmFtZScsICdw bGFpbicpOyAvLyBzdHVwaWQgSUUKCQlsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncGxh aW4nKTsKCgkJbGluay5hcHBlbmRDaGlsZChhKTsKCgkJLy8gLS0tLS0tLS0tLS0tLS0tLQoK CQl2YXIgaDNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gzJyk7CgoJCWZv ciAodmFyIGkgPSAwOyBpIDwgaDNzLmxlbmd0aDsgaSsrKQoJCXsKCQkJdmFyIGgzID0gZG9j dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gzJylbaV07CgoJCQlpZiAoaDMuZmlyc3RD aGlsZC5maXJzdENoaWxkKQoJCQl7CgkJCQlpZiAoaDMuZmlyc3RDaGlsZC5maXJzdENoaWxk Lm5vZGVWYWx1ZSA9PSB0eHQpCgkJCQl7CgkJCQkJaDMucGFyZW50Tm9kZS5pbnNlcnRCZWZv cmUobGluaywgaDMpOwoJCQkJfQoJCQl9CgkJfQoJfQpqczsKCgkJZXhpdCgwKTsKCX0KCglp ZiAoZ3BzKCduYW1lJykgPT0gJ3BvcCcpCgl7CgkJJHVwbV9maWxlX2ZpZWxkID0gc3RyX3Jl cGxhY2UoJ18nLCAnLScsICR1cG1fZmlsZV9maWVsZCk7CgoJCSRsYW5nX2NoZWNrX2xlYXZl ID0gdXBtX2ZpbGVfcG9wcGVyX2dUeHQoJ2NoZWNrX2xlYXZlJyk7CgoJCWhlYWRlcigiQ29u dGVudC10eXBlOiB0ZXh0L2phdmFzY3JpcHQiKTsKCgkJZWNobyA8PDxqcwoJZnVuY3Rpb24g YXR0YWNoRmlsZShpZCkKCXsKCQlpZiAod2luZG93Lm9wZW5lci5kb2N1bWVudC5hcnRpY2xl KQoJCXsKCQkJaWYgKHdpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyR1 cG1fZmlsZV9maWVsZCcpLnZhbHVlID09ICcnKQoJCQl7CgkJCQl3aW5kb3cub3BlbmVyLmRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCckdXBtX2ZpbGVfZmllbGQnKS52YWx1ZSArPSBpZDsK CQkJCXJldHVybiBzaG93TXNnKCdzdWNjZXNzJyk7CgkJCX0KCgkJCWVsc2UKCQkJewoJCQkJ d2luZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHVwbV9maWxlX2ZpZWxk JykudmFsdWUgKz0gJywnK2lkOwoJCQkJcmV0dXJuIHNob3dNc2coJ3N1Y2Nlc3MnKTsKCQkJ fQoJCX0KCgkJcmV0dXJuIHNob3dNc2coJ2ZhaWxlZCcpOwoJfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1 bmN0aW9uIHdhcm5FZGl0RmlsZShpZCkKCXsKCQlpZiAod2luZG93Lm9wZW5lci5kb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgnYm9keScpLnZhbHVlICE9IHdpbmRvdy5vcGVuZXIuZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbV9maWxlX3BvcHBlcl9zdGFydCcpLnZhbHVlKQoJCXsK CQkJdmFyIGNoZWNrID0gY29uZmlybSgnJGxhbmdfY2hlY2tfbGVhdmUnKTsKCgkJCWlmIChj aGVjaykKCQkJewoJCQkJZ29FZGl0RmlsZShpZCk7CgkJCX0KCQl9CgoJCWVsc2UKCQl7CgkJ CWdvRWRpdEZpbGUoaWQpOwoJCX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBnb0VkaXRG aWxlKGlkKQoJewoJCXdpbmRvdy5vcGVuZXIuZm9jdXMoKTsKCgkJaWYgKHdpbmRvdy5vcGVu ZXIuZG9jdW1lbnQuYXJ0aWNsZS5zdGVwLnZhbHVlICE9ICdjcmVhdGUnKQoJCXsKCQkJZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3llcycpLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRv dy5vcGVuZXIuZG9jdW1lbnQubG9jYXRpb24pOwoJCQlzaG93TXNnKCdyZXR1cm4nKTsKCQl9 CgoJCXdpbmRvdy5vcGVuZXIuZG9jdW1lbnQubG9jYXRpb24gPSAnP2V2ZW50PWZpbGVcdTAw MjZzdGVwPWZpbGVfZWRpdFx1MDAyNmlkPScraWQ7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rp b24gZ29CYWNrKHVybCkKCXsKCQl3aW5kb3cub3BlbmVyLmZvY3VzKCk7CgoJCWRvbmUoJ3Jl dHVybicpOwoKCQl3aW5kb3cub3BlbmVyLmRvY3VtZW50LmxvY2F0aW9uID0gdXJsOwoJfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHNob3dNc2coaWQpCgl7CgkJdmFyIG9iaiA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKCgkJdmFyIHdpZHRoID0gcGFyc2VJbnQob2JqLnN0 eWxlLndpZHRoKTsKCQl2YXIgaGVpZ2h0ID0gcGFyc2VJbnQob2JqLnN0eWxlLmhlaWdodCk7 CgoJCXZhciB0b3AgPSAxMDAgKyBzY3JvbGxUb3AoKTsKCQl2YXIgbGVmdCA9ICggKHBhZ2VX aWR0aCgpIC8gMikgLSAod2lkdGggLyAyKSApICsgc2Nyb2xsTGVmdCgpOwoKCQlvYmouc3R5 bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwoJCW9iai5zdHlsZS50b3AgPSB0b3AgKyAncHgn OwoJCW9iai5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7CgkJb2JqLnN0eWxlLmRpc3BsYXkg PSAnYmxvY2snOwoKCQlpZiAoaWQgIT0gJ3JldHVybicpCgkJewoJCQlzZXRUaW1lb3V0KCJk b25lKCciK2lkKyInKSIsIDEwMDApOwoJCX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBk b25lKGlkKQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5 ID0gJ25vbmUnOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHBhZ2VXaWR0aCgpCgl7CgkJ aWYgKHNlbGYuaW5uZXJXaWR0aCkKCQl7CgkJCXJldHVybiBzZWxmLmlubmVyV2lkdGg7CgkJ fQoKCQllbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKQoJCXsKCQkJcmV0dXJuIGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudC5jbGllbnRXaWR0aDsKCQl9CgoJCXJldHVybiAwOwoJfQoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoKCWZ1bmN0aW9uIHNjcm9sbFRvcCgpCgl7CgkJaWYgKHNlbGYucGFnZVlPZmZzZXQpCgkJ ewoJCQlyZXR1cm4gc2VsZi5wYWdlWU9mZnNldDsKCQl9CgoJCWVsc2UgaWYgKGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9w KQoJCXsKCQkJcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7CgkJ fQoKCQlyZXR1cm4gMDsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBzY3JvbGxMZWZ0KCkK CXsKCQlpZiAoc2VsZi5wYWdlWU9mZnNldCkKCQl7CgkJCXJldHVybiBzZWxmLnBhZ2VYT2Zm c2V0OwoJCX0KCgkJZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApCgkJewoJCQlyZXR1cm4gZG9jdW1lbnQu ZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7CgkJfQoKCQlyZXR1cm4gMDsKCX0KanM7CgoJ CWV4aXQoMCk7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1fZmlsZV9wb3BwZXJf aW1nKCkKCXsKCQl3aGlsZSAoQG9iX2VuZF9jbGVhbigpKTsKCgkJaGVhZGVyKCJDb250ZW50 LXR5cGU6IGltYWdlL2dpZiIpOwoKCQllY2hvIGJhc2U2NF9kZWNvZGUoJ2lWQk9SdzBLR2dv QUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJHZEJUVUVBQUsvSU53V0s2 Jy4KCQkJJ1FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhK WlR3QUFBSnZTVVJCVkRqTHBaUHJTNU5oR0lmOVc3WXZCWU8nLgoJCQkna2hsa29xQ2tsV0No djJXeUtpazdibG5OcmlzNzJiaTZkdXMwRExaMFREeFcxb2R0b3BEczREOE1EWnVMVTBrWHE2 MUNpalNJSWFzT3Z2OTRWVCcuCgkJCSdVZkxpQjc0ZlhuZ3VwN252cm52SkFCSi81UGZMblRU ZGN3T2o0UnNkWW1vNWdsQldQNmlPdHp3dklLU1dzdEkwV2d4ODBTQmJscEt0RTlLUXMvJy4K CQkJJ1dlN0VhV29ULzh3YldQNjFnTW1DSDBsTUR2b2tUNGoyNVRpUVUvSVRGa2VrOU93Nis3 V0gyZ3dzbWFoQ1Bkd3l3NzV1dzlIRU8yZ1VaU2tmeUknLgoJCQknOXpCUENKT29KMlNNbWc0 Nk42MVlPL3JOb2EzOVhpNDFvRnVYeXNNZmgzNi9GcDBiN2JBZldBSDZSR2kwSGdsV05DYnpZ Z0phRmpSdjZ6R3V5KycuCgkJCSdiOUl0OTZOM1NRdk5LaVY5SHZTYURmRkVJeFhJdG5QczIz QnpKUWQ2RERFVk0wT0tzb1Z3QkcvMVZNenBYVldoYmtVTTJLNG9KQkRZdUdtYktJJy4KCQkJ J0owcXhzQWJIZlJMemJqY25VYkZCSXB4L3FIM3ZRdjliM1UwM0lRL0hmRmtFUlR6ZkZqOHc4 alNwUjdHQkUxMjN1RkVZQXphRFJJcVgvMkpBdEonLgoJCQknYkRhdC9DT2tkN0NOQnZhMmNN dnEwTUd4cDBQUlNDUEY4QlhqV0czRmdOSGM5WFBUNzFPankzc01GZGZKUkNlS3hFc1Z0S3dG SHdBTFpmQ1VrMycuCgkJCSd0SWZOUjhYaUp3YzFMbUw0ZGcxNDFKUEt0ajNXVWRORkpxTEdG VlBDNE9rUjRCeGFqVFdzQ2hZNjR3bUNuTXhzV1BDSGN1dEtCeE1WcDVteEExJy4KCQkJJ1Mr YU1Db21Ub2FxVFJVUWtuTFRINjJrSE9WRUUrVlFuamFoc2NOQ3kwY01CV3NTSTBUQ1FjWmM1 QUxrRVlja0w1QTVub1dTQmhmbTJBZWNNQWonLgoJCQknYmNSV1YwcFVUaDBIRTY0VE5mMG1j emNublF5dS9NaWxhRkpDYWUxbncyZmJ6MURuVk94eUdUbEtlWmZ0L0ZmOHgxQlJzc2ZBQ2pU d1FBQUFBQicuCgkJCSdKUlU1RXJrSmdnZz09Jyk7CgoJCWV4aXQoMCk7Cgl9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCgoJZnVuY3Rpb24gdXBtX2ZpbGVfcG9wcGVyX2dUeHQoJHZhciwgJGF0dHMgPSBhcnJh eSgpKQoJewoJCSRsYW5nID0gYXJyYXkoCgkJCSdhdHRhY2gnCQkJCQkJCT0+ICdBdHRhY2gn LAoJCQknYXR0YWNoX2ZpbGUnCQkJCQk9PiAnQXR0YWNoIEZpbGUnLAoJCQknY2hlY2tfbGVh dmUnCQkJCQk9PiAnWW91IGhhdmUgbWFkZSBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IHBvc3Qg d2hpY2ggeW91IGhhdmUgbm90IHNhdmVkLiBDb250aW51ZSB3aXRob3V0IHNhdmluZz8nLAoJ CQknZGVzY3JpcHRpb25fZm9yJwkJCT0+ICdEZXNjcmlwdGlvbiBmb3InLAoJCQknZmFpbGVk JwkJCQkJCQk9PiAnSW5zZXJ0IGZhaWxlZC4nLAoJCQknZmlsZV9zZWxlY3RvcicJCQkJPT4g J0ZpbGUgU2VsZWN0b3InLAoJCQknZm9yZ290X2ZpZWxkJwkJCQk9PiAnWW91IGZvcmdvdCB0 byBjcmVhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgY3VzdG9tIGZpZWxkIGZvciB1cG1fZmlsZS91 cG1fZmlsZV9wb3BwZXIgdG8gdXNlLicsCgkJCSdub19kZXNjcmlwdGlvbicJCQk9PiAnTm8g ZGVzY3JpcHRpb24gaGFzIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBmaWxlLicsCgkJCSdwYWNr ZXRfY3VzdG9tX2ZpZWxkJyA9PiAnUGFja2V0IEN1c3RvbSBGaWVsZCcsCgkJCSdyZXR1cm4n CQkJCQkJCT0+ICdSZXR1cm4gdG8gZWRpdGluZyB0aGUgcG9zdD8nLAoJCQknc3VjY2VzcycJ CQkJCQkJPT4gJ1N1Y2Nlc3MuJywKCQkJJ3ZpZXdfYWxsJwkJCQkJCT0+ICdWaWV3IEFsbCcK CQkpOwoKCQlyZXR1cm4gc3RydHIoJGxhbmdbJHZhcl0sICRhdHRzKTsKCX0iO3M6NDoiaGVs cCI7czoyMTI6ImgxLiB1cG1fZmlsZV9wb3BwZXIKClRoaXMgcGx1Z2luIGFkZHMgYSBsaW5r IHRvIGEgcG9wdXAgd2luZG93IG9mIGEgbGlzdCBvZiB5b3VyIGZpbGVzLCB0byBiZSB1c2Vk IHdpdGggdXBtX2ZpbGUuCgpUaGUgIkF0dGFjaCIgaWNvbiBpcyBmcm9tICJNYXJrIEphbWVz JyBTaWxr4oCdaWNvbiBzZXQiOmh0dHA6Ly93d3cuZmFtZmFtZmFtLmNvbS9sYWIvaWNvbnMv c2lsay8uIjtzOjg6ImhlbHBfcmF3IjtzOjIxMjoiaDEuIHVwbV9maWxlX3BvcHBlcgoKVGhp cyBwbHVnaW4gYWRkcyBhIGxpbmsgdG8gYSBwb3B1cCB3aW5kb3cgb2YgYSBsaXN0IG9mIHlv dXIgZmlsZXMsIHRvIGJlIHVzZWQgd2l0aCB1cG1fZmlsZS4KClRoZSAiQXR0YWNoIiBpY29u IGlzIGZyb20gIk1hcmsgSmFtZXMnIFNpbGvigJ1pY29uIHNldCI6aHR0cDovL3d3dy5mYW1m YW1mYW0uY29tL2xhYi9pY29ucy9zaWxrLy4iO3M6MTU6ImFsbG93X2h0bWxfaGVscCI7aTow O3M6MzoibWQ1IjtzOjMyOiI0MmY1ODQ1NzdmMTAwYmY5OTgyNGRjYmIzMmEyMzNlYyI7fQ==