# mem_moderation_image v0.7.6 # Moderation plugin that allows user to submit images. # Michael Manfre # http://manfre.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjIwOiJtZW1fbW9kZXJhdGlvbl9pbWFnZSI7czo3OiJ2ZXJz aW9uIjtzOjU6IjAuNy42IjtzOjY6ImF1dGhvciI7czoxNDoiTWljaGFlbCBNYW5mcmUiO3M6 MTA6ImF1dGhvcl91cmkiO3M6MTg6Imh0dHA6Ly9tYW5mcmUubmV0LyI7czoxMToiZGVzY3Jp cHRpb24iO3M6NTI6Ik1vZGVyYXRpb24gcGx1Z2luIHRoYXQgYWxsb3dzIHVzZXIgdG8gc3Vi bWl0IGltYWdlcy4iO3M6NDoidHlwZSI7aToxO3M6NDoiaGVscCI7czo5MDI6Igk8aDE+SW1h Z2UgTW9kZXJhdGlvbjwvaDE+CgoJPHA+VGhpcyBtb2RlcmF0aW9uIHBsdWdpbiBhbGxvd3Mg dXNlcnMgdG8gc3VibWl0IGltYWdlcyBpbiB0byB0aGUgbW9kZXJhdGlvbiBxdWV1ZS4gSWYg dGhlIHBsdWdpbiBtZW1fbW9kZXJhdGlvbl9hcnRpY2xlIGlzIGluc3RhbGxlZCwgdGhlbiB0 aGVzZSBpbWFnZXMgY2FuIGJlIHdyYXBwZWQgaW4gYSBuZXcgYXJ0aWNsZS48L3A+CgoJPGgy IGNsYXNzPSJzZWN0aW9uIGxpY2Vuc2UiPkxpY2Vuc2U8L2gyPgoKCTxwPlRoaXMgcGx1Z2lu IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvbGlj ZW5zaW5nL2xpY2Vuc2VzL2luZm8vR1BMdjIuaHRtbCI+R1BMdjI8L2E+LjwvcD4KCgk8aDIg Y2xhc3M9InNlY3Rpb24gaW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2gyPgoKCTxwPlRo aXMgcGx1Z2luIHJlcXVpcmVzIHRoZSBwbHVnaW5zIG1lbV9mb3JtIHZlcnNpb24gMC41LjIr LCBtZW1fYWRtaW5fcGFyc2UgYW5kIG1lbV9tb2RlcmF0aW9uIHRvIGZ1bmN0aW9uIHByb3Bl cmx5LjwvcD4KCgk8cD48YSBocmVmPSIuL2luZGV4LnBocD9ldmVudD1pbWFnZV9tb2RlcmF0 ZSZhbXA7c3RlcD1wcmVpbnN0YWxsIj5TdGFydCBJbnN0YWxsIFdpemFyZDwvYT48L3A+CgoJ PGgyIGNsYXNzPSJzZWN0aW9uIGV4YW1wbGVzIj5FeGFtcGxlczwvaDI+CgoJPHA+U2VlIGZv cm0gbW9kX2ltYWdlX2Zvcm0gZm9yIGFuIGV4YW1wbGUgdXNpbmcgbm9ybWFsIGltYWdlIHVw bG9hZC48L3A+CgoJPHA+U2VlIGZvcm0gbW9kX2ltYWdlX2FydGljbGVfZm9ybSBmb3IgYW4g ZXhhbXBsZSB0aGF0IHdpbGwgdXBsb2FkIGFuIGltYWdlIGFuZCBhc3NvY2lhdGUgaXQgd2l0 aCBhIG5ld2x5IGNyZWF0ZWQgYXJ0aWNsZS48L3A+IjtzOjQ6ImNvZGUiO3M6MzQ0NTc6Igov Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KLy8gUGx1Z2luCi8vIEF1dGhvcjogTWljaGFlbCBNYW5mcmUgKGh0dHA6Ly9tYW5m cmUubmV0LykKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vCgpkZWZpbmUoJ01FTV9NT0RfQVJUSUNMRV9UTVBfRklMRV9QUkVG SVgnLCAndHhwbWVtXycpOwoKZ2xvYmFsICRldmVudCwgJGV4dGVuc2lvbnMsICRwYXRoX3Rv X3NpdGUsICRpbWdfZGlyLCAkcHJlZnMsICRpbWFnZV92YXJzLCAkbWVtX21vZGVyYXRpb25f bGFuZzsKCnJlcXVpcmVfcGx1Z2luKCdtZW1fbW9kZXJhdGlvbicpOwpyZXF1aXJlX3BsdWdp bignbWVtX2Zvcm0nKTsKCiRpbWFnZV92YXJzID0gYXJyYXkoJ2lkJywnbmFtZScsJ2NhdGVn b3J5JywnZXh0JywndycsJ2gnLCdhbHQnLCdjYXB0aW9uJywnZGF0ZScsJ2F1dGhvcicsJ3Rt cGZpbGUnLCd0bXBmaWxlbmFtZScsJ2RhdGVfdGFrZW4nLCdrZXl3b3JkcycsJ25vdGUnKTsK CgppZiAoQCRwcmVmc1snbWVtX21vZF9pbWdfd3JhcF93aXRoX2FydGljbGUnXSkgewoJcmVx dWlyZV9wbHVnaW4oJ21lbV9tb2RlcmF0aW9uX2FydGljbGUnKTsKfQoKJGltYWdlX3ZhcnMg PSBhcnJheV9tZXJnZSgkaW1hZ2VfdmFycywgYXJyYXkoJ2FydGljbGVpZCcsICdhcnRpY2xl X3NlY3Rpb24nLCAnYXJ0aWNsZV90aXRsZScsICAnYXJ0aWNsZV90aXRsZV9odG1sJywgJ2Fy dGljbGVfYm9keScsICdhcnRpY2xlX2JvZHlfaHRtbCcsICdhcnRpY2xlX2V4Y2VycHQnLCAn YXJ0aWNsZV9leGNlcnB0X2h0bWwnLCAnYXJ0aWNsZV90ZXh0aWxlX2V4Y2VycHQnLCAnYXJ0 aWNsZV9pbWFnZScsICdhcnRpY2xlX3RleHRpbGVfYm9keScsICdhcnRpY2xlX2tleXdvcmRz JywgJ2FydGljbGVfc3RhdHVzJywgJ2FydGljbGVfY2F0ZWdvcnkxJywgJ2FydGljbGVfY2F0 ZWdvcnkyJywgJ2FydGljbGVfYW5ub3RhdGUnLCAnYXJ0aWNsZV9hbm5vdGF0ZWludml0ZScs ICdhcnRpY2xlX292ZXJyaWRlX2Zvcm0nLCAnYXJ0aWNsZV9jdXN0b21fMScsICdhcnRpY2xl X2N1c3RvbV8yJywgJ2FydGljbGVfY3VzdG9tXzMnLCAnYXJ0aWNsZV9jdXN0b21fNCcsICdh cnRpY2xlX2N1c3RvbV81JywgJ2FydGljbGVfY3VzdG9tXzYnLCAnYXJ0aWNsZV9jdXN0b21f NycsICdhcnRpY2xlX2N1c3RvbV84JywgJ2FydGljbGVfY3VzdG9tXzknLCAnYXJ0aWNsZV9j dXN0b21fMTAnLCAnYXJ0aWNsZV93cmFwX2VuYWJsZWQnKSApOwoKCi8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KaWYgKEB0eHBpbnRlcmZhY2UhPSdhZG1pbicgfHwgKEB0eHBpbnRlcmZhY2U9PSdhZG1p bicgYW5kICgkZXZlbnQ9PSdtb2RlcmF0ZScgb3IgJGV2ZW50PT0naW1hZ2VfbW9kZXJhdGUn KSkpCnsKCW1lbV9tb2RlcmF0aW9uX3JlZ2lzdGVyKCdpbWFnZScsICRpbWFnZV92YXJzLCAn bWVtX21vZGVyYXRpb25faW1hZ2VfcHJlc2VudGVyJywgJ21lbV9tb2RlcmF0aW9uX2ltYWdl X2FwcHJvdmVyJywgJ21lbV9tb2RlcmF0aW9uX2ltYWdlX3JlamVjdGVyJyk7CgltZW1fbW9k ZXJhdGlvbl9yZWdpc3RlcignaW1hZ2UtZWRpdCcsICRpbWFnZV92YXJzLCAnbWVtX21vZGVy YXRpb25faW1hZ2VfcHJlc2VudGVyJywgJ21lbV9tb2RlcmF0aW9uX2ltYWdlX2FwcHJvdmVy JywgJ21lbV9tb2RlcmF0aW9uX2ltYWdlX3JlamVjdGVyJyk7CgoJcmVxdWlyZV9vbmNlIHR4 cGF0aC4nL2luY2x1ZGUvdHhwX2ltYWdlLnBocCc7CglpbmNsdWRlX29uY2UgdHhwYXRoLicv bGliL2NsYXNzLnRodW1iLnBocCc7Cn0KCiRtZW1fbW9kX2ltZ19sYW5nID0gYXJyYXkoCgkn aW1hZ2VfbW9kZXJhdGUnID0+ICdJbWFnZSBNb2RlcmF0aW9uJywKCSdtZW1fbW9kX2ltZycg PT4gJ0ltYWdlIE1vZGVyYXRpb24nLAoKCS8vIHByZWZzCgknbWVtX21vZF9pbWdfd3JhcF93 aXRoX2FydGljbGUnCT0+ICdXcmFwIHdpdGggQXJ0aWNsZT8nLAoJJ21lbV9tb2RfaW1nX3Np emVfZnVsbCcJPT4gJ0ltYWdlIHNpemUgKFd4SCk6JywKCSdtZW1fbW9kX2ltZ19zaXplX3Ro dW1ibmFpbCcJPT4gJ1RodW1ibmFpbCBzaXplIChXeEgpOicsCgknbWVtX21vZF9pbWdfd3Jh cF9kZWZhdWx0Jwk9PiAnV3JhcCBEZWZhdWx0PycsCgknbWVtX21vZF9pbWdfdGh1bWJuYWls X2Nyb3AnCT0+ICdDcm9wIFRodW1ibmFpbD8nLAoJJ21lbV9tb2RfaW1nX3NoYXJwZW4nCT0+ ICdTaGFycGVuIEltYWdlPycsCgknbWVtX21vZF9pbWdfcXVhbGl0eScJPT4gJ0pQRUcgSW1h Z2UgUXVhbGl0eScsCik7CgokbWVtX21vZGVyYXRpb25fbGFuZyA9IGFycmF5X21lcmdlKCRt ZW1fbW9kZXJhdGlvbl9sYW5nLCAkbWVtX21vZF9pbWdfbGFuZyk7CgovLy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpCnsKCXJlZ2lzdGVyX2NhbGxiYWNr KCdtZW1faW1hZ2VfbW9kZXJhdGUnLCdpbWFnZV9tb2RlcmF0ZScsJycsIDEpOwoJYWRkX3By aXZzKCdpbWFnZV9tb2RlcmF0ZScsJzEsMiwzJyk7CgoJaWYgKCRldmVudCA9PSAnaW1hZ2Vf bW9kZXJhdGUnIG9yICRldmVudCA9PSAnbW9kZXJhdGUnKSB7CgoJCWZ1bmN0aW9uIG1lbV9t b2RlcmF0aW9uX2ltYWdlX3VuaW5zdGFsbCgpCgkJewoJCQkkbG9nID0gYXJyYXkoKTsKCgkJ CWlmIChzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywibmFtZSBMSUtFICdtb2RfaW1hZ2VfJSci KSkKCQkJCSRsb2dbXSA9ICdEZWxldGVkIGFsbCBpbWFnZSBtb2RlcmF0aW9uIHByZWZlcmVu Y2VzJzsKCQkJZWxzZQoJCQkJJGxvZ1tdID0gJ0ZhaWxlZCB0byBkZWxldGUgaW1hZ2UgbW9k ZXJhdGlvbiBwcmVmZXJlbmNlcyc7CgoJCQlyZXR1cm4gdGFnKCJVbkluc3RhbGwgTG9nIiwn aDInKS5kb1dyYXAoJGxvZywndWwnLCdsaScpOwoJCX0KCgkJZnVuY3Rpb24gbWVtX21vZGVy YXRpb25faW1hZ2VfcHJlaW5zdGFsbCgpCgkJewoJCQlyZXR1cm4gbWVtX21vZGVyYXRpb25f aW1hZ2VfaW5zdGFsbCgpOwoJCX0KCgkJZnVuY3Rpb24gbWVtX21vZGVyYXRpb25faW1hZ2Vf aW5zdGFsbCgpCgkJewoJCQlnbG9iYWwgJHByZWZzOwoJCQkkbG9nID0gYXJyYXkoKTsKCgkJ CS8vIHJlbW92ZSBvbGQgdmFsdWVzCgkJCXNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCJuYW1l IExJS0UgJ21vZGltZ18lJyIpOwoKCgkJCSRwID0gYXJyYXkoCgkJCQknd3JhcF93aXRoX2Fy dGljbGUnID0+IGFycmF5KCcwJywgMjAwLCAneWVzbm9yYWRpbycpLAoJCQkJJ3NpemVfZnVs bCcgPT4gYXJyYXkoJzY0MHg0ODAnLCAyMDUsICd0ZXh0X2lucHV0JyksCgkJCQknc2l6ZV90 aHVtYm5haWwnID0+IGFycmF5KCcxNjB4MTIwJywgMjA2LCAndGV4dF9pbnB1dCcpLAoJCQkJ J3dyYXBfZGVmYXVsdCcgPT4gYXJyYXkoJzAnLCAyMDgsICd5ZXNub3JhZGlvJyksCgkJCQkn dGh1bWJuYWlsX2Nyb3AnID0+IGFycmF5KCcwJywgMjEwLCAneWVzbm9yYWRpbycpLAoJCQkJ J3NoYXJwZW4nID0+IGFycmF5KCcwJywgMjExLCAneWVzbm9yYWRpbycpLAoJCQkJJ3F1YWxp dHknID0+IGFycmF5KCc4MCcsIDIxMiwgJ3RleHRfaW5wdXQnKSwKCQkJKTsKCgoJCQlmb3Jl YWNoKCRwIGFzICRwcmVmID0+ICR2KQoJCQl7CgkJCQlpZiAoIWlzc2V0KCRwcmVmc1skcHJl Zl0pKQoJCQkJewoJCQkJCWlmIChzZXRfcHJlZignbWVtX21vZF9pbWdfJyAuICRwcmVmLCAk dlswXSwgJ21lbV9tb2RfaW1nJywgUFJFRl9BRFZBTkNFRCwgJHZbMl0sICR2WzFdKSkKCQkJ CQl7CgkJCQkJCSRsb2dbXSA9IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ3NldF9wcmVmJywgYXJy YXkoJ3tuYW1lfScgPT4gJHByZWYpKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJ JGxvZ1tdID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnc2V0X3ByZWZfZmFpbGVkJywgYXJyYXko J3tuYW1lfScgPT4gJHByZWYpKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJ JGxvZ1tdID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnc2V0X3ByZWZfZXhpc3RzJywgYXJyYXko J3tuYW1lfScgPT4gJHByZWYpKTsKCQkJCX0KCQkJfQoKCgkJCSRmb3JtcyA9IGFycmF5KCk7 CgkJCSRmb3Jtc1snbW9kX2ltYWdlX2Zvcm0nXSA9IDw8PEVPRgo8dHhwOm1lbV9tb2RlcmF0 aW9uX2ltYWdlX2Zvcm0+Cgk8dHhwOm1lbV9mb3JtX2ZpbGUgbmFtZT0idGhlZmlsZSIgbGFi ZWw9IkltYWdlIiBicmVhaz0iIiAvPgoJPHR4cDptZW1fZm9ybV9zZWxlY3RfY2F0ZWdvcnkg dHlwZT0iaW1hZ2UiIG5hbWU9ImNhdGVnb3J5IiBsYWJlbD0iQ2F0ZWdvcnkiIGJyZWFrPSIi IC8+Cgk8dHhwOm1lbV9mb3JtX3RleHQgbmFtZT0iY2FwdGlvbiIgbGFiZWw9IkNhcHRpb24i IGJyZWFrPSIiIC8+Cgk8dHhwOm1lbV9mb3JtX3RleHQgbmFtZT0iYWx0IiBsYWJlbD0iQWx0 IiBicmVhaz0iIiAvPgoJPHR4cDptZW1fZm9ybV90ZXh0IG5hbWU9Im5vdGUiIGxhYmVsPSJO b3RlcyIgYnJlYWs9IiIgLz4KCTx0eHA6bWVtX2Zvcm1fc3VibWl0IG5hbWU9Im1lbV9tb2Rl cmF0aW9uX3NhdmUiIGxhYmVsPSJTYXZlIiAvPgo8L3R4cDptZW1fbW9kZXJhdGlvbl9pbWFn ZV9mb3JtPgpFT0Y7CgoJCQkkZm9ybXNbJ21vZF9pbWFnZV9hcnRpY2xlX2Zvcm0nXSA9IDw8 PEVPRgo8dHhwOm1lbV9tb2RlcmF0aW9uX2ltYWdlX2Zvcm0+Cgk8dHhwOm1lbV9mb3JtX3Rl eHQgbmFtZT0iYXJ0aWNsZV90aXRsZSIgbGFiZWw9IlRpdGxlIiBicmVhaz0iIi8+Cgk8dHhw Om1lbV9mb3JtX3NlbGVjdF9jYXRlZ29yeSBuYW1lPSJhcnRpY2xlX2NhdGVnb3J5MSIgbGFi ZWw9IkNhdGVnb3J5IiBicmVhaz0iIi8+Cgk8dHhwOm1lbV9mb3JtX3RleHRhcmVhIG5hbWU9 ImFydGljbGVfYm9keSIgbGFiZWw9IkJvZHkiIGJyZWFrPSIiLz4KCgk8dHhwOm1lbV9mb3Jt X2ZpbGUgbmFtZT0idGhlZmlsZSIgbGFiZWw9IkltYWdlIiBicmVhaz0iIiAvPgoJPHR4cDpt ZW1fZm9ybV9zZWxlY3RfY2F0ZWdvcnkgdHlwZT0iaW1hZ2UiIG5hbWU9ImNhdGVnb3J5IiBs YWJlbD0iQ2F0ZWdvcnkiIGJyZWFrPSIiIC8+Cgk8dHhwOm1lbV9mb3JtX3RleHQgbmFtZT0i Y2FwdGlvbiIgbGFiZWw9IkNhcHRpb24iIGJyZWFrPSIiIC8+Cgk8dHhwOm1lbV9mb3JtX3Rl eHQgbmFtZT0iYWx0IiBsYWJlbD0iQWx0IiBicmVhaz0iIiAvPgoKCTx0eHA6bWVtX2Zvcm1f dGV4dGFyZWEgbmFtZT0ibm90ZSIgbGFiZWw9Ik5vdGVzIGZvciB0aGUgTW9kZXJhdG9yIChv cHRpb25hbCkiIHJlcXVpcmVkPSIwIiAvPgoJPHR4cDptZW1fZm9ybV9zdWJtaXQgbmFtZT0i bWVtX21vZGVyYXRpb25fc2F2ZSIgbGFiZWw9IlNhdmUiIC8+CjwvdHhwOm1lbV9tb2RlcmF0 aW9uX2ltYWdlX2Zvcm0+CkVPRjsKCgkJCWZvcmVhY2goJGZvcm1zIGFzICRuYW1lID0+ICRo dG1sKQoJCQl7CgkJCQkkZm9ybSA9IGZldGNoKCdGb3JtJywgJ3R4cF9mb3JtJywgJ25hbWUn LCAkbmFtZSk7CgkJCQlpZiAoISRmb3JtKQoJCQkJewoJCQkJCSRmb3JtX2h0bWwgPSBkb1Ns YXNoKCRodG1sKTsKCQkJCQlpZiAoc2FmZV9pbnNlcnQoJ3R4cF9mb3JtJywgIm5hbWU9J3sk bmFtZX0nLCB0eXBlPSdtaXNjJywgRm9ybT0neyRmb3JtX2h0bWx9JyIpKQoJCQkJCXsKCQkJ CQkJJGxvZ1tdID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnZm9ybV9jcmVhdGVkJywgYXJyYXko J3tmb3JtfScgPT4gJ21vZF9pbWFnZV9mb3JtJykpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJ ewoJCQkJCQkkbG9nW10gPSBtZW1fbW9kZXJhdGlvbl9nVHh0KCdmb3JtX2NyZWF0ZV9mYWls ZWQnLCBhcnJheSgne2Zvcm19JyA9PiAnbW9kX2ltYWdlX2Zvcm0nLCAne215c3FsX2Vycm9y fScgPT4gbXlzcWxfZXJyb3IoKSkpOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJ CQkkbG9nW10gPSBtZW1fbW9kZXJhdGlvbl9nVHh0KCdmb3JtX2ZvdW5kJywgYXJyYXkoJ3tm b3JtfScgPT4gJG5hbWUpKTsKCQkJCX0KCQkJfQoKCgkJCXJldHVybiB0YWcoIkluc3RhbGwg TG9nIiwnaDInKS5kb1dyYXAoJGxvZywndWwnLCdsaScpOwoJCX0KCgkJZnVuY3Rpb24gbWVt X2ltYWdlX21vZGVyYXRlKCRldmVudCwgJHN0ZXApCgkJewoJCQkkbXNnPScnOwoKCQkJaWYg KCRzdGVwPT0naW1hZ2Vfc2F2ZScgb3IgJHN0ZXA9PSdpbWFnZV91cGRhdGUnKQoJCQl7CgkJ CQkvLyBzYXZlIGNoYW5nZXMKCQkJCSRtc2cgPSBtZW1faW1hZ2Vfc2F2ZSgkc3RlcCk7CgkJ CX0KCQkJZWxzZSBpZiAoJHN0ZXA9PSdwcmVpbnN0YWxsJyB8fCAkc3RlcD09J2luc3RhbGwn KQoJCQl7CgkJCQlyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCdpbWFnZV9tb2RlcmF0ZScs IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ2ltYWdlX21vZGVyYXRlJykpOwoJCQkJZWNobyBwYWdl VG9wKCdJbWFnZSBNb2RlcmF0aW9uJywnJyk7CgoJCQkJaWYgKCRzdGVwPT0ncHJlaW5zdGFs bCcpCgkJCQkJZWNobyBtZW1fbW9kZXJhdGlvbl9pbWFnZV9wcmVpbnN0YWxsKCk7CgkJCQll bHNlCgkJCQkJZWNobyBtZW1fbW9kZXJhdGlvbl9pbWFnZV9pbnN0YWxsKCk7CgoJCQkJcmV0 dXJuOwoJCQl9CgkJCWVsc2UgaWYgKCRzdGVwPT0ndW5pbnN0YWxsJykKCQkJewoJCQkJcmVn aXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ2ltYWdlX21vZGVyYXRlJywgbWVtX21vZGVyYXRp b25fZ1R4dCgnaW1hZ2VfbW9kZXJhdGUnKSk7CgkJCQllY2hvIHBhZ2VUb3AoJ0ltYWdlIE1v ZGVyYXRpb24nLCcnKTsKCQkJCWVjaG8gbWVtX2ltYWdlX3VuaW5zdGFsbCgpOwoJCQkJcmV0 dXJuOwoJCQl9CgkJCWVsc2UgaWYgKCRzdGVwID09ICdpbWdfZGlzcGxheScpCgkJCXsKCQkJ CW1lbV9tb2RlcmF0aW9uX2ltYWdlX3ByZXNlbnRlcl9pbWcoKTsKCQkJfQoJCQllbHNlCgkJ CXsKCQkJCXJlZ2lzdGVyX3RhYignZXh0ZW5zaW9ucycsICdpbWFnZV9tb2RlcmF0ZScsIG1l bV9tb2RlcmF0aW9uX2dUeHQoJ2ltYWdlX21vZGVyYXRlJykpOwoKCQkJCSRtc2cgPSAnJzsK CQkJfQoKCQkJcGFnZVRvcCgnSW1hZ2UgTW9kZXJhdGlvbicsJG1zZyk7CgkJfQoJfQoKCWZ1 bmN0aW9uIG1lbV9tb2RlcmF0aW9uX2ltYWdlX3RlbXB1cmwoJGZpbGVuYW1lKQoJewoJCXJl dHVybiAnP2V2ZW50PWltYWdlX21vZGVyYXRlJiMzODtzdGVwPWltZ19kaXNwbGF5JiMzODtm PScgLiB1cmxlbmNvZGUoJGZpbGVuYW1lKTsKCX0KfQoKCmZ1bmN0aW9uIGltYWdlX21vZGVy YXRlX2Zvcm0oKQp7CglnbG9iYWwgJHN0ZXA7CgoJJGRhdGEgPSBncHNhKGFycmF5KCdhbHQn LCdjYXRlZ29yeScsJ2NhcHRpb24nLCdhdXRob3InLCduYW1lJywnZXh0JywndG1wZmlsZScs J2tleXdvcmRzJywncGhvdG9ncmFwaGVyJywnZGF0ZV90YWtlbicsJ3RpdGxlJywnbm90ZScp KTsKCglyZXR1cm4gaW1hZ2VfcHJlc2VudGVyKCdpbWFnZScsJGRhdGEpOwp9CgpyZWdpc3Rl cl9jYWxsYmFjaygnbWVtX21vZGVyYXRpb25faW1hZ2VfZm9ybV9kZWZhdWx0cycsICdtZW1f Zm9ybS5kZWZhdWx0cycpOwpyZWdpc3Rlcl9jYWxsYmFjaygnbWVtX21vZGVyYXRpb25faW1h Z2VfZm9ybV9kaXNwbGF5JywgJ21lbV9mb3JtLmRpc3BsYXknLCcnKTsKcmVnaXN0ZXJfY2Fs bGJhY2soJ21lbV9tb2RlcmF0aW9uX2ltYWdlX2Zvcm1fc3VibWl0dGVkJywgJ21lbV9mb3Jt LnN1Ym1pdCcpOwoKZnVuY3Rpb24gbWVtX21vZGVyYXRpb25faW1hZ2VfZm9ybV9kZWZhdWx0 cygpCnsKCWdsb2JhbCAkbWVtX2Zvcm0sICRtZW1fZm9ybV90eXBlLCAkbWVtX2Zvcm1fZGVm YXVsdCwgJG1lbV9tb2RfaW5mbywgJG1lbV9tb2RhcnRpY2xlX2luZm8sICRpbWdfZGlyOwoK CS8vIHR5cGUgY2hlY2sKCWlmICgkbWVtX2Zvcm1fdHlwZSE9J21lbV9tb2RlcmF0aW9uX2lt YWdlJykKCXsKCQlyZXR1cm47Cgl9CgoJZXh0cmFjdChncHNhKGFycmF5KCdtb2RpZCcsJ2Fy dGljbGVpZCcpKSk7CgoJLy8gZWRpdGluZyBtb2QgaXRlbQoJaWYgKCFlbXB0eSgkbW9kaWQp KQoJewoJCS8vIGdldCBtb2QgZGF0YQoJCSRtZW1fbW9kX2luZm8gPSBzYWZlX3JvdygnKics J3R4cF9tb2RlcmF0aW9uJywiYGlkYD0nIi5kb1NsYXNoKCRtb2RpZCkuIiciKTsKCgkJaWYg KCRtZW1fbW9kX2luZm8pCgkJewoJCQkvLyBzZXQgZGVjb2RlZAoJCQkkbWVtX21vZGFydGlj bGVfaW5mbyA9IG1lbV9tb2RlcmF0aW9uX2RlY29kZSgkbWVtX21vZF9pbmZvWydkYXRhJ10p OwoKCQkJJHRoZWZpbGUgPSAkbWVtX21vZGFydGljbGVfaW5mb1sndGhlZmlsZSddOwoJCQlp ZiAoaXNfYXJyYXkoJHRoZWZpbGUpKQoJCQl7CgkJCQlpZiAoZW1wdHkoJG1lbV9tb2RhcnRp Y2xlX2luZm9bJ3RtcGZpbGVuYW1lJ10pKQoJCQkJewoJCQkJCSRtZW1fbW9kYXJ0aWNsZV9p bmZvWyd0bXBmaWxlbmFtZSddID0gTUVNX01PRF9BUlRJQ0xFX1RNUF9GSUxFX1BSRUZJWCAu IGJhc2VuYW1lKCR0aGVmaWxlWyd0bXBfbmFtZSddKSAuICR0aGVmaWxlWyduYW1lJ107CgkJ CQl9CgkJCX0KCQl9Cgl9CgkvLyBlZGl0aW5nIHB1Ymxpc2ggYXJ0aWNsZQoJZWxzZSBpZiAo IWVtcHR5KCRhcnRpY2xlaWQpKQoJewoJCSRycyA9IHNhZmVfcm93KCcqJywgJ3RleHRwYXR0 ZXJuJywiYGlkYD0nIi5kb1NsYXNoKCRhcnRpY2xlaWQpLiInIik7CgoJCS8vIHNldCBtb2Qg ZGF0YQoJCSRtZW1fbW9kYXJ0aWNsZV9pbmZvID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRycyBh cyAkayA9PiAkdikKCQl7CgkJCSRtZW1fbW9kYXJ0aWNsZV9pbmZvWydhcnRpY2xlXycuc3Ry dG9sb3dlcigkayldID0gJHY7CgkJfQoKCQkkbWVtX21vZGFydGljbGVfaW5mb1snYXJ0aWNs ZWlkJ10gPSAkcnNbJ0lEJ107Cgl9CgoJaWYgKGlzX2FycmF5KCRtZW1fbW9kYXJ0aWNsZV9p bmZvKSkKCXsKCQkvLyBzZXQgZGVmYXVsdHMKCQlmb3JlYWNoKCRtZW1fbW9kYXJ0aWNsZV9p bmZvIGFzICRrZXkgPT4gJHZhbCkKCQl7CgkJCW1lbV9mb3JtX2RlZmF1bHQoJGtleSwgJHZh bCk7CgkJfQoKCQlpZiAoIWVtcHR5KCRtZW1fbW9kYXJ0aWNsZV9pbmZvWydhcnRpY2xlX2lt YWdlJ10pKQoJCXsKCQkJJGltYWdlX2lkID0gJG1lbV9tb2RhcnRpY2xlX2luZm9bJ2FydGlj bGVfaW1hZ2UnXTsKCQkJJHJzID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgImlkID0g JGltYWdlX2lkIik7CgoJCQlpZiAoJHJzKQoJCQl7CgkJCQkkZmlsZSA9IElNUEFUSCAuICRy c1snaWQnXSAuICRyc1snZXh0J107CgoJCQkJaWYgKGZpbGVfZXhpc3RzKCRmaWxlKSkKCQkJ CXsKCQkJCQkkdHlwZSA9ICcnOwoJCQkJCWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29u dGVudF90eXBlJykpCgkJCQkJCSR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRmaWxlKTsK CgkJCQkJaWYgKGVtcHR5KCR0eXBlKSkKCQkJCQl7CgkJCQkJCXN3aXRjaCgkcnNbJ2V4dCdd KQoJCQkJCQl7CgkJCQkJCQljYXNlICcuanBnJzoKCQkJCQkJCQkkdHlwZSA9ICdpbWFnZS9q cGVnJzsKCQkJCQkJCQlicmVhazsKCQkJCQkJCWNhc2UgJy5naWYnOgoJCQkJCQkJCSR0eXBl ID0gJ2ltYWdlL2dpZic7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCW1l bV9mb3JtX2RlZmF1bHQoJ3RoZWZpbGUnLCBhcnJheSgKCQkJCQkJJ3RtcF9uYW1lJyA9PiAk ZmlsZSwKCQkJCQkJJ25hbWUnID0+ICRyc1snbmFtZSddLAoJCQkJCQkndHlwZScgPT4gJHR5 cGUKCQkJCQkpKTsKCQkJCQkkbWVtX21vZGFydGljbGVfaW5mb1snaW1hZ2VfdXJsJ10gPSBo dS4kaW1nX2Rpci4nLycuJHJzWydpZCddLid0Jy4kcnNbJ2V4dCddOwoKCQkJCQkkbWVtX21v ZGFydGljbGVfaW5mb1snYWx0J10gPSAkcnNbJ2FsdCddOwoJCQkJCW1lbV9mb3JtX2RlZmF1 bHQoJ2FsdCcsICRyc1snYWx0J10pOwoKCQkJCQkkbWVtX21vZGFydGljbGVfaW5mb1snY2Fw dGlvbiddID0gJHJzWydjYXB0aW9uJ107CgkJCQkJbWVtX2Zvcm1fZGVmYXVsdCgnY2FwdGlv bicsICRyc1snY2FwdGlvbiddKTsKCQkJCX0KCQkJfQoJCX0KCX0KfQoKZnVuY3Rpb24gbWVt X21vZGVyYXRpb25faW1hZ2VfZm9ybV9kaXNwbGF5KCkKewoJZ2xvYmFsICRtZW1fZm9ybV90 eXBlLCAkbWVtX21vZF9pbmZvLCAkbWVtX21vZGFydGljbGVfaW5mbzsKCgkvLyB0eXBlIGNo ZWNrCglpZiAoJG1lbV9mb3JtX3R5cGUhPSdtZW1fbW9kZXJhdGlvbl9pbWFnZScpCgl7CgkJ cmV0dXJuOwoJfQoKCSRvdXQgPSAnJzsKCWlmIChpc3NldCgkbWVtX21vZF9pbmZvKSkKCXsK CQkkb3V0IC49IG4uJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1vZGlkIiB2YWx1ZT0i Jy5odG1sc3BlY2lhbGNoYXJzKCRtZW1fbW9kX2luZm9bJ2lkJ10pLiciIC8+Jy4KCQkJbi4n PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9IicuIGh0bWxzcGVjaWFs Y2hhcnMoJG1lbV9tb2RfaW5mb1sndHlwZSddKS4nIiAvPic7CgoJCWlmICgoJG1lbV9tb2Rf aW5mb1sndHlwZSddID09ICdhcnRpY2xlLWVkaXQnIHx8ICRtZW1fbW9kX2luZm9bJ3R5cGUn XT09J2ltYWdlLWVkaXQnICkgJiYgaXNzZXQoJG1lbV9tb2RhcnRpY2xlX2luZm9bJ2FydGlj bGVpZCddKSkKCQkJJG91dCAuPSBuLic8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhcnRp Y2xlaWQiIHZhbHVlPSInLiRtZW1fbW9kYXJ0aWNsZV9pbmZvWydhcnRpY2xlaWQnXS4nIiAv Pic7CgoJCW1lbV9mb3JtX3N0b3JlKCdtb2RpZCcsICdtb2RpZCcsICRtZW1fbW9kX2luZm9b J2lkJ10pOwoJCW1lbV9mb3JtX3N0b3JlKCd0eXBlJywgJ3R5cGUnLCAkbWVtX21vZF9pbmZv Wyd0eXBlJ10pOwoJfQoJZWxzZSBpZiAoaXNzZXQoJG1lbV9tb2RhcnRpY2xlX2luZm8pKQoJ ewoJCWlmIChlbXB0eSgkbWVtX21vZGFydGljbGVfaW5mb1snYXJ0aWNsZWlkJ10pKQoJCQkk bWVtX21vZGFydGljbGVfaW5mb1snYXJ0aWNsZWlkJ10gPSAkbWVtX21vZGFydGljbGVfaW5m b1snaWQnXTsKCgkJJG91dCAuPSBuLic8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhcnRp Y2xlaWQiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJG1lbV9tb2RhcnRpY2xlX2luZm9b J2FydGljbGVpZCddKS4nIiAvPicuCgkJCW4uJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9 InR5cGUiIHZhbHVlPSJhcnRpY2xlIiAvPic7CgoJCWlmICghZW1wdHkoJG1lbV9tb2RhcnRp Y2xlX2luZm9bJ2ltYWdlX3VybCddKSkKCQl7CgkJCSRvdXQgLj0gbi4nPGlucHV0IHR5cGU9 ImhpZGRlbiIgbmFtZT0iaW1hZ2VfdXJsIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRt ZW1fbW9kYXJ0aWNsZV9pbmZvWydpbWFnZV91cmwnXSkuJyIgLz4nOwoJCX0KCX0KCglyZXR1 cm4gJG91dDsKfQoKCmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9uX2ltYWdlX2Zvcm0oJGF0dHMs ICR0aGluZz0nJykKewoJJGF0dHNbJ3R5cGUnXSA9ICdtZW1fbW9kZXJhdGlvbl9pbWFnZSc7 CgkkYXR0c1snZW5jdHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoKCglpZiAoIWVt cHR5KCRhdHRzWydmb3JtJ10pKQoJewoJCSR0aGluZyA9IGZldGNoX2Zvcm0oJGZvcm0pOwoJ CXVuc2V0KCRhdHRzWydmb3JtJ10pOwoJfQoKCSRzZWNyZXRzID0gYXJyYXkoKTsKCgkkbW9k aWQgPSBncHMoJ21vZGlkJyk7CglpZiAoIWVtcHR5KCRtb2RpZCkpICRzZWNyZXRzW10gPSAn bW9kaWQnOwoKCWZvcmVhY2goJHNlY3JldHMgYXMgJGEpCgl7CgkJJHRoaW5nIC49ICc8dHhw Om1lbV9mb3JtX3NlY3JldCBuYW1lPSInLiRhLiciIHZhbHVlPSInLiQkYS4nIiAvPic7CgkJ dW5zZXQoJGF0dHNbJGFdKTsKCX0KCglyZXR1cm4gbWVtX2Zvcm0oJGF0dHMsICR0aGluZyk7 Cn0KCmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9uX2ltYWdlX2Zvcm1fc3VibWl0dGVkKCkKewoJ Z2xvYmFsICRtZW1fZm9ybV90eXBlLCAkbWVtX2Zvcm1fdmFsdWVzLCAkdHhwX3VzZXI7CgoJ aWYgKCRtZW1fZm9ybV90eXBlICE9ICdtZW1fbW9kZXJhdGlvbl9pbWFnZScpCgkJcmV0dXJu OwoKCWV4dHJhY3QoJG1lbV9mb3JtX3ZhbHVlcyk7CgoJaWYgKGlzc2V0KCRhY3Rpb24pKQoJ ewoJCSRpc19zYXZlID0gJGFjdGlvbiA9PSAnbWVtX21vZGVyYXRpb25fc2F2ZSc7CgkJJGlz X2RlbGV0ZSA9ICRhY3Rpb24gPT0gJ21lbV9tb2RlcmF0aW9uX2RlbGV0ZSc7CgkJJGlzX3Vw ZGF0ZSA9ICgkYWN0aW9uID09ICdtZW1fbW9kZXJhdGlvbl91cGRhdGUnKSB8fCAoJGlzX3Nh dmUgJiYgJG1vZGlkKTsKCX0KCWVsc2UKCXsKCQkkaXNfc2F2ZSA9IHBzKCdtZW1fbW9kZXJh dGlvbl9zYXZlJyk7CgkJJGlzX2RlbGV0ZSA9IHBzKCdtZW1fbW9kZXJhdGlvbl9kZWxldGUn KTsKCQkkaXNfdXBkYXRlID0gcHMoJ21lbV9tb2RlcmF0aW9uX3VwZGF0ZScpIHx8ICgkaXNf c2F2ZSAmJiBwcygnbW9kaWQnKSk7Cgl9CgoJaWYgKCRpc191cGRhdGUpCgkJJGlzX3NhdmUg PSBmYWxzZTsKCglpZiAoJGlzX2RlbGV0ZSkKCXsKCQlpZiAocmVtb3ZlX21vZGVyYXRlZF9j b250ZW50KCRtb2RpZCkpCgkJewoJCQltZW1fbW9kZXJhdGlvbl9pbWFnZV9yZWplY3Rvcign aW1hZ2UnLCBhcnJheSgndG1wZmlsZSc9PiR0bXBmaWxlbmFtZSkpOwoJCX0KCX0KCWVsc2Vp ZiAoJGlzX3NhdmUgfHwgJGlzX3VwZGF0ZSkKCXsKCQkvLyBnZXQgYXJncwoJCWlmICgkaXNf dXBkYXRlKQoJCXsKCQkJJG1zZyA9IG1lbV9pbWFnZV9zYXZlKCdpbWFnZV91cGRhdGUnKTsK CQl9CgkJZWxzZQoJCXsKCQkJJG1zZyA9IG1lbV9pbWFnZV9zYXZlKCcnKTsKCQl9Cgl9Cn0K CmZ1bmN0aW9uIG1vZGltZ19mb3JtKCRhdHRzLCR0aGluZz0nJykKewoJZ2xvYmFsICRzdGVw LCR0eHBfdXNlciwkbWVtX21vZF9pbmZvLCRtZW1fbW9kaW1nX2luZm8sJGltYWdlX3ZhcnM7 CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknaXNpemUnCQk9PiAyNSwKCQknZm9ybScJCT0+ ICcnLAoJCSdzdWNjZXNzZm9ybScJPT4gJycsCgkJJ21heGZpbGVzaXplJyA9PiAnJywKCQkn YWNjZXB0JyA9PiAnJwoJKSwkYXR0cykpOwoKCWV4dHJhY3QoZ3BzYShhcnJheSgnbW9kaWQn LCdhY3Rpb24nLCdldmVudCcsJ3N0ZXAnKSkpOwoKCWV4dHJhY3QoZ3BzYSgkaW1hZ2VfdmFy cykpOwoKCWlmIChlbXB0eSgkYXV0aG9yKSkKCQkkYXV0aG9yID0gJHR4cF91c2VyOwoKCSRv dXQgPSAnJzsKCglpZiAoaXNzZXQoJGFjdGlvbikgYW5kICRhY3Rpb249PWdUeHQoICdkZWxl dGUnICkpCgkJJHN0ZXAgPSAnaW1hZ2VfZGVsZXRlJzsKCglpZiAoaXNzZXQoJHN0ZXApIGFu ZCAoJHN0ZXA9PSdpbWFnZV9zYXZlJyBvciAkc3RlcD09J2ltYWdlX3VwZGF0ZScgb3IgJHN0 ZXA9PSdpbWFnZV9kZWxldGUnKSkgewoJCWlmICghZW1wdHkoJHN1Y2Nlc3Nmb3JtKSkKCQkJ JEZvcm0gPSBmZXRjaF9mb3JtKCRzdWNjZXNzZm9ybSk7CgoJCWlmICgkc3RlcD09J2ltYWdl X2RlbGV0ZScpIHsKCQkJaWYgKHJlbW92ZV9tb2RlcmF0ZWRfY29udGVudCgkbW9kaWQpKSB7 CgkJCQkvLyBkZWxldGUgdGhlIGZpbGUKCQkJCW1lbV9tb2RlcmF0aW9uX2ltYWdlX3JlamVj dGVyKCdpbWFnZScsYXJyYXkoJ3RtcGZpbGUnPT4kdG1wZmlsZSkpOwoJCQkJJG1zZyA9ICdE ZWxldGVkIGltYWdlJzsKCQkJfSBlbHNlIHsKCQkJCSRtc2cgPSAnRmFpbGVkIHRvIGRlbGV0 ZSBpbWFnZSc7CgkJCX0KCQl9IGVsc2UgewoJCQkkbXNnID0gbWVtX2ltYWdlX3NhdmUoJHN0 ZXApOwoJCX0KCgkJJG91dCA9IGFkbWluX3BhcnNlKCRGb3JtKTsKCgkJdW5zZXQoJG1lbV9t b2RpbWdfaW5mbyk7Cgl9IGVsc2UgewoKCQlpZiAoZW1wdHkoJGZvcm0pKQoJCQkkRm9ybSA9 ICR0aGluZzsKCQllbHNlCgkJCSRGb3JtID0gZmV0Y2hfZm9ybSgkZm9ybSk7CgoKCQkkYWN0 aW9uX3VybCA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwoJCSRxcyA9IHN0cnBvcygkYWN0 aW9uX3VybCwnPycpOwoJCWlmICgkcXMpICRhY3Rpb25fdXJsID0gc3Vic3RyKCRhY3Rpb25f dXJsLCAwLCAkcXMpOwoKCQkkYWNjZXB0ID0gKCFlbXB0eSgkYWNjZXB0KSA/ICcgYWNjZXB0 PSInLiRhY2NlcHQuJyInIDogJycpOwoKCQkkb3V0ID0Jbi5uLiI8Zm9ybSBlbmN0eXBlPSdt dWx0aXBhcnQvZm9ybS1kYXRhJyBhY3Rpb249J3skYWN0aW9uX3VybH0nIG1ldGhvZD0ncG9z dCd7JGFjY2VwdH0+IiAuCgkJCQkoIWVtcHR5KCRtYXhmaWxlc2l6ZSkgJiYgaXNfaW50ZWdl cigkbWF4ZmlsZXNpemUpID8gaElucHV0KCdNQVhfRklMRV9TSVpFJywgJG1heGZpbGVzaXpl KSA6ICcnKSAuCgkJCQllSW5wdXQoJ2ltYWdlX21vZGVyYXRlJykgLgoJCQkJc0lucHV0KCAk c3RlcD09J2ltYWdlX2VkaXQnID8gJ2ltYWdlX3VwZGF0ZScgOiAnaW1hZ2Vfc2F2ZScgKTsK CgkJaWYgKGlzc2V0KCRtb2RpZCkgYW5kICFlbXB0eSgkbW9kaWQpKSB7CgkJCSRvdXQgLj0g aElucHV0KCdtb2RpZCcsJG1vZGlkKTsKCgkJCSRtZW1fbW9kX2luZm8gPSBzYWZlX3Jvdygn KicsJ3R4cF9tb2RlcmF0aW9uJywiYGlkYD0nIi5kb1NsYXNoKCRtb2RpZCkuIiciKTsKCgkJ CWV4dHJhY3QobWVtX21vZGVyYXRpb25fZGVjb2RlKCRtZW1fbW9kX2luZm9bJ2RhdGEnXSkp OwoKCQkJJG91dCAuPSBAaElucHV0KCd0bXBmaWxlbmFtZScsJHRtcGZpbGVuYW1lKTsKCgkJ CSRvdXQgLj0gQGhJbnB1dCgnbWVtX21vZGltZ19pbmZvX2RhdGEnLCRtZW1fbW9kX2luZm9b J2RhdGEnXSk7CgkJfQoKCQkkY2FwdGlvbl9hcmVhID0gJzx0ZXh0YXJlYSBuYW1lPSJjYXB0 aW9uIiBjb2xzPSI0MCIgcm93cz0iNyI+Jy4kY2FwdGlvbi4nPC90ZXh0YXJlYT4nOwoJCSRu b3RlX2FyZWEgPSAnPHRleHRhcmVhIG5hbWU9Im5vdGUiIGNvbHM9IjQwIiByb3dzPSI0Ij4n LkAkbWVtX21vZF9pbmZvWydkZXNjJ10uJzwvdGV4dGFyZWE+JzsKCQkkc2VsZWN0cyA9IGV2 ZW50X2NhdGVnb3J5X3BvcHVwKCJpbWFnZSIsICRjYXRlZ29yeSwgJycpOwoJCSRzZWxlY3Rz X2NhdDEgPSBjYXRlZ29yeV9wb3B1cCgiYXJ0aWNsZV9jYXRlZ29yeTEiLCBAJGFydGljbGVf Y2F0ZWdvcnkxLCcnKTsKCQkkc2VsZWN0c19jYXQyID0gY2F0ZWdvcnlfcG9wdXAoImFydGlj bGVfY2F0ZWdvcnkyIiwgQCRhcnRpY2xlX2NhdGVnb3J5MiwnJyk7CgkJJGtleXdvcmRzX2Fy ZWEgPSAnPHRleHRhcmVhIG5hbWU9ImFydGljbGVfa2V5d29yZHMiIGNsYXNzPSJtb2Rfa2V5 d29yZHNfaW5wdXQiPicgLiBAJGFydGljbGVfa2V5d29yZHMgLiAnPC90ZXh0YXJlYT4nOwoK CQkkdmFscyA9IGFycmF5KAoJCQknZmlsZV9pbnB1dCcJCT0+IChlbXB0eSgkdG1wZmlsZW5h bWUpP2ZJbnB1dCgnZmlsZScsJ3RoZWZpbGUnLCcnLCdlZGl0JykgOiBoSW5wdXQoJ3RtcGZp bGUnLCR0bXBmaWxlKSAuICR0bXBmaWxlbmFtZSApLAoJCQkndGl0bGVfaW5wdXQnCQk9PiBm SW5wdXQoJ3RleHQnLCdhbHQnLCRhbHQsICRpc2l6ZSwnbW9kaW1nX3RpdGxlX2lucHV0Jywi MCIpLAoJCQknY2F0ZWdvcnlfaW5wdXQnCT0+ICRzZWxlY3RzLAoJCQknY2FwdGlvbl9pbnB1 dCcJCT0+ICRjYXB0aW9uX2FyZWEsCgkJCSdub3RlX2lucHV0JwkJPT4gJG5vdGVfYXJlYSwK CQkJJ2F1dGhvcl9pbnB1dCcJCT0+IGZJbnB1dCgndGV4dCcsJ2F1dGhvcicsQCRhdXRob3Is JGlzaXplLCdtb2RpbWdfYXV0aG9yX2lucHV0JywiMCIpLAoJCQknYXJ0aWNsZV9hdXRob3In CT0+IGZJbnB1dCgndGV4dCcsJ2FydGljbGVfYXV0aG9yJyxAJGFydGljbF9hdXRob3IsJGlz aXplLCdtb2RpbWdfYXV0aG9yX2lucHV0JywiMCIpLAoJCQknYXJ0aWNsZV9jYXRlZ29yeTEn CT0+ICRzZWxlY3RzX2NhdDEsCgkJCSdhcnRpY2xlX2NhdGVnb3J5MicJPT4gJHNlbGVjdHNf Y2F0MiwKCQkJJ2FydGljbGVfdGl0bGUnCQk9PiBmSW5wdXQoJ3RleHQnLCdhcnRpY2xlX3Rp dGxlJyxAJGFydGljbGVfdGl0bGUsJGlzaXplLCdtb2RpbWdfYXJ0aWNsZV90aXRsZScsIjAi KSwKCQkJJ2FydGljbGVfa2V5d29yZHMnCT0+ICRrZXl3b3Jkc19hcmVhLAoJCQknc3VibWl0 JwkJCT0+IGZJbnB1dCggInN1Ym1pdCIsICdhY3Rpb24nLCBnVHh0KCAnc2F2ZScgKSwgInB1 Ymxpc2giICksCgkJCSdkZWxldGUnCQkJPT4gKCFlbXB0eSgkbW9kaWQpID8gZklucHV0KCAi c3VibWl0IiwgJ2FjdGlvbicsIGdUeHQoICdkZWxldGUnICksICJkZWxldGUiLCAnJywgInJl dHVybiBjb25maXJtKCciLiBnVHh0KCdhcmVfeW91X3N1cmUnKSAuIicpIiApIDogJycpLAoJ CSk7CgkJZm9yKCRpPTE7JGk8PTEwOyRpKyspIHsKCQkJJGsgPSAiYXJ0aWNsZV9jdXN0b21f eyRpfSI7CgkJCSR2YWxzWyRrXSA9IGZJbnB1dCgndGV4dCcsICRrLCBAJCRrLCAkaXNpemUs J21vZGltZ18nLiRrLCIwIik7CgkJfQoKCQlmb3JlYWNoICgkdmFscyBhcyAkYT0+JGIpIHsK CQkJJGEgPSAnPHR4cDptb2RpbWdfJy4kYS4nIC8+JzsKCQkJJEZvcm0gPSBzdHJfcmVwbGFj ZSgkYSwkYiwkRm9ybSk7CgkJfQoKCQkkb3V0IC49ICRGb3JtOwoKCQkkb3V0IC49ICc8L2Zv cm0+Jy5uOwoKCQl1bnNldCgkbWVtX21vZF9pbmZvKTsKCX0KCglyZXR1cm4gJG91dDsKfQoK Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gbW9kaW1nX2dldF9pbWFnZV9kaW1lbnNpb25zKCR0aHVt Ym5haWw9ZmFsc2UpCnsKCWdsb2JhbCAkcHJlZnM7CglpZiAoJHRodW1ibmFpbCkgewoJCSRk aW0gPSAkcHJlZnNbJ21lbV9tb2RfaW1nX3NpemVfdGh1bWJuYWlsJ107CgoJCSR3ID0gMTYw OwoJCSRoID0gMTIwOwoJfSBlbHNlIHsKCQkkZGltID0gQCRwcmVmc1snbWVtX21vZF9pbWdf c2l6ZV9mdWxsJ107CgoJCSR3ID0gNjQwOwoJCSRoID0gNDgwOwoJfQoKCWlmICgkZGltKQoJ ewoJCSRkaW0gPSBleHBsb2RlKCd4JywkZGltKTsKCgkJaWYgKGNvdW50KCRkaW0pID09IDIp CgkJewoJCQkkdyA9ICRkaW1bMF07CgkJCSRoID0gJGRpbVsxXTsKCQl9Cgl9CgoJJHogPSBh cnJheSgkdywkaCk7CgoJcmV0dXJuICR6Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIG1lbV9p bWFnZV9zYXZlKCRzdGVwKQp7Cglpbmlfc2V0KCdtZW1vcnlfbGltaXQnLCAnMzJNJyk7Cgln bG9iYWwgJHR4cGNmZywgJHR4cGFjLCAkcHJlZnMsICRleHRlbnNpb25zLCAkcGF0aF90b19z aXRlLCAkdHhwX3VzZXIsICRpZ25fdXNlciwgJG1lbV9tb2RfaW5mbywgJG1lbV9tb2RpbWdf aW5mbywgJGltYWdlX3ZhcnMsICRtZW1fZm9ybV92YWx1ZXM7CgoJaWYgKGlzc2V0KCRpZ25f dXNlcikpICR0eHBfdXNlciA9ICRpZ25fdXNlcjsKCgkkaXNfbWVtX2Zvcm0gPSBmYWxzZTsK CgkvLyBkZXRlcm1pbmUgY2FsbGVyCglpZiAoIWVtcHR5KCRtZW1fZm9ybV92YWx1ZXMpKQoJ ewoJCS8vIHB1YmxpYyBtZW1fZm9ybQoJCSR2YXJyYXkgPSAkbWVtX2Zvcm1fdmFsdWVzOwoJ CSRpc19tZW1fZm9ybSA9IHRydWU7CgoJCSR2YXJyYXlbJ2lkJ10gPSAkaWQgPSBAJHZhcnJh eVsnbW9kaWQnXTsKCX0KCWVsc2UKCXsKCQkkYXJncyA9IGdwc2EoJGltYWdlX3ZhcnMpOwoK CQkkaW5mPWdwcygnbWVtX21vZGltZ19pbmZvX2RhdGEnKTsKCgkJaWYgKCFlbXB0eSgkaW5m KSkKCQl7CgkJCS8vIGFkbWluIG1vZCBmb3JtCgkJCSR2YXJyYXkgPSBsQXR0cyhtZW1fbW9k ZXJhdGlvbl9kZWNvZGUoJGluZiksICRhcmdzKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gbGVn YWN5CgkJCSR2YXJyYXkgPSAkYXJnczsKCQl9CgoJCSRtb2RpZCA9IGdwcygnbW9kaWQnKTsK CX0KCglpZiAoIWVtcHR5KCRtb2RpZCkpICR2YXJyYXlbJ2lkJ10gPSAkaWQgPSAkbW9kaWQ7 CgoJaWYoJHR4cGFjWyd0ZXh0aWxlX2xpbmtzJ10pCgl7CgkJaW5jbHVkZV9vbmNlICR0eHBj ZmdbJ3R4cGF0aCddLicvbGliL2NsYXNzVGV4dGlsZS5waHAnOwoJCSR0ZXh0aWxlID0gbmV3 IFRleHRpbGUoKTsKCgkJJHZhcnJheVsnY2FwdGlvbiddID0gJHRleHRpbGUtPlRleHRpbGVU aGlzKCR2YXJyYXlbJ2NhcHRpb24nXSwxKTsKCgkJdW5zZXQoJHRleHRpbGUpOwoJfQoKCSRy ZXMgPSAnJzsKCglpZiAoJGlzX21lbV9mb3JtKQoJewoJCSRmaWxlID0gJG1lbV9mb3JtX3Zh bHVlc1sndGhlZmlsZSddWyd0bXBfbmFtZSddOwoJCSRuYW1lID0gJG1lbV9mb3JtX3ZhbHVl c1sndGhlZmlsZSddWyduYW1lJ107Cgl9CgllbHNlCgl7CgkJJGZpbGUgPSAkX0ZJTEVTWyd0 aGVmaWxlJ11bJ3RtcF9uYW1lJ107CgkJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25h bWUnXTsKCgkJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkZmlsZSk7Cgl9CgoJJHZhcnJh eVsndXNlciddID0gJHR4cF91c2VyOwoJJGVtYWlsID0gc2FmZV9maWVsZCgnZW1haWwnLCAn dHhwX3VzZXJzJywgIm5hbWU9JyIuZG9TbGFzaCgkdHhwX3VzZXIpLiInIik7CgoJaWYgKCFl bXB0eSgkZmlsZSkpCgl7CgkJJHZhcnJheVsndG1wZmlsZW5hbWUnXSA9IE1FTV9NT0RfQVJU SUNMRV9UTVBfRklMRV9QUkVGSVggLiBiYXNlbmFtZSgkZmlsZSkgLiAkbmFtZTsKCgkJJHBl bmRpbmdfZmlsZSA9ICRwcmVmc1sndGVtcGRpciddIC4gRFMgLiAkdmFycmF5Wyd0bXBmaWxl bmFtZSddOwoKCQlpZiAoIWlzc2V0KCR2YXJyYXlbJ25vdGUnXSkpCgkJewoJCQkkdmFycmF5 Wydub3RlJ10gPSAhZW1wdHkoJHZhcnJheVsnYXJ0aWNsZV90aXRsZSddKSA/CgkJCQkkdmFy cmF5Wydub3RlJ10gPSAkdmFycmF5WydhcnRpY2xlX3RpdGxlJ10gOiAkdmFycmF5WyduYW1l J107CgkJfQoKCQkkdHhwX3NvdXJjZWRfaW1hZ2UgPSBkaXJuYW1lKCRmaWxlKS4nLycgPT0g SU1QQVRIOwoKCQlpZiAoZmlsZV9leGlzdHMoJHBlbmRpbmdfZmlsZSkpCgkJewoJCQlsaXN0 KCR3LCRoLCRleHRlbnNpb24pID0gZ2V0aW1hZ2VzaXplKCRwZW5kaW5nX2ZpbGUpOwoKCQkJ JHZhcnJheVsndyddID0gJHc7CgkJCSR2YXJyYXlbJ2gnXSA9ICRoOwoJCQkkdmFycmF5Wydl eHQnXSA9ICRleHRlbnNpb25zWyRleHRlbnNpb25dOwoJCQkkdmFycmF5WyduYW1lJ10gPSBz dWJzdHIoJG5hbWUsMCxzdHJycG9zKCRuYW1lLCcuJykpIC4gJHZhcnJheVsnZXh0J107CgkJ CSR2YXJyYXlbJ3RtcGZpbGUnXSA9ICRwZW5kaW5nX2ZpbGU7CgkJfQoJCS8vIElzIHRoZSBp bWFnZSBiZWluZyBzb3VyY2VkIGZyb20gdGhlIHR4cCBpbWFnZXMgZm9sZGVyCgkJZWxzZSBp ZiAoZGlybmFtZSgkZmlsZSkuJy8nID09IElNUEFUSCkKCQl7CgkJCS8vIE5vIHByb2Nlc3Np bmcgbmVlZGVkLCBqdXN0IGR1cGxpY2F0ZSB0aGUgZmlsZQoJCQlpZiAoIWNvcHkoJGZpbGUs ICRwZW5kaW5nX2ZpbGUpKQoJCQl7CgkJCQkkcmVzID0gIkZhaWxlZCB0byB1cGxvYWQgaW1h Z2UiOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCWxpc3QoJHcsJGgsJGV4dGVuc2lvbikgPSBn ZXRpbWFnZXNpemUoJGZpbGUpOwoKCQkJaWYgKCRleHRlbnNpb25zWyRleHRlbnNpb25dKQoJ CQl7CgkJCQlsaXN0KCR3aWR0aCwkaGVpZ2h0KSA9IG1vZGltZ19nZXRfaW1hZ2VfZGltZW5z aW9ucygpOwoKCQkJCWlmIChjbGFzc19leGlzdHMoJ3dldF90aHVtYicpKQoJCQkJewoJCQkJ CSRzaGFycGVuID0gKEAkcHJlZnNbJ21lbV9tb2RfaW1nX3NoYXJwZW4nXSA9PSAxIHx8IEAk cHJlZnNbJ21lbV9tb2RfaW1nX3NoYXJwZW4nXSA9PT0gdHJ1ZSk7CgoJCQkJCSRxdWFsaXR5 ID0gQCRwcmVmc1snbWVtX21vZF9pbWdfcXVhbGl0eSddOwoJCQkJCWlmICgkcXVhbGl0eSA9 PT0gZmFsc2UgfHwgZW1wdHkoJHF1YWxpdHkpIHx8ICFpc19udW1lcmljKCRxdWFsaXR5KSB8 fCAoJHF1YWxpdHkgPCAwIHx8ICRxdWFsaXR5ID4gMTAwKSkKCQkJCQkJJHF1YWxpdHkgPSA4 MDsKCgkJCQkJJHQgPSBuZXcgd2V0X3RodW1iKCk7CgoJCQkJCS8vIHJlbW92ZSBpY29uCgkJ CQkJJHQtPmhpbnQgPSBmYWxzZTsKCQkJCQkkdC0+Y3JvcCA9IGZhbHNlOwoJCQkJCSR0LT5h ZGRncmV5dG9oaW50ID0gZmFsc2U7CgkJCQkJJHQtPnF1YWxpdHkgPSAkcXVhbGl0eTsKCQkJ CQkkdC0+c2hhcnBlbiA9IGZhbHNlOyAvLyRzaGFycGVuOwoKCQkJCQlpZiAoJHcgPiAkaCkK CQkJCQkJJHQtPndpZHRoID0gJHdpZHRoOwoJCQkJCWVsc2UKCQkJCQkJJHQtPmhlaWdodCA9 ICRoZWlnaHQ7CgoJCQkJCWlmICgkdC0+d3JpdGUoJGZpbGUsJGZpbGUuJy5yZXNpemVkJykp CgkJCQkJewoJCQkJCQl1bmxpbmsoJGZpbGUpOwoJCQkJCQkkZmlsZSA9ICRmaWxlLicucmVz aXplZCc7CgoJCQkJCQkkdyA9ICR0LT53aWR0aDsKCQkJCQkJJGggPSAkdC0+aGVpZ2h0OwoJ CQkJCX0KCgkJCQkJdW5zZXQoJHQpOwoJCQkJfQoKCQkJCWlmIChzaGlmdF91cGxvYWRlZF9m aWxlKCRmaWxlLCAkcGVuZGluZ19maWxlKSAhPSBmYWxzZSkKCQkJCXsKCQkJCQkkdmFycmF5 Wyd3J10gPSAkdzsKCQkJCQkkdmFycmF5WydoJ10gPSAkaDsKCQkJCQkkdmFycmF5WydleHQn XSA9ICRleHRlbnNpb25zWyRleHRlbnNpb25dOwoJCQkJCSR2YXJyYXlbJ25hbWUnXSA9IHN1 YnN0cigkbmFtZSwwLHN0cnJwb3MoJG5hbWUsJy4nKSkgLiAkdmFycmF5WydleHQnXTsKCQkJ CQkkdmFycmF5Wyd0bXBmaWxlJ10gPSAkcGVuZGluZ19maWxlOwoJCQkJfQoJCQkJZWxzZQoJ CQkJewoJCQkJCSRyZXMgPSAiRmFpbGVkIHRvIHVwbG9hZCBpbWFnZSI7CgkJCQl9CgkJCX0g ZWxzZSB7CgkJCQkkcmVzID0gIid7JGV4dGVuc2lvbn0nIGlzIGFuIHVuYXBwcm92ZWQgZXh0 ZW5zaW9uIjsKCQkJfQoJCX0KCX0gLy8gaWYgISRmaWxlCgllbHNlCgl7CgkJaWYgKCRwcmVm c1snbWVtX21vZF9pbWdfd3JhcF93aXRoX2FydGljbGUnXSkKCQl7CgkJCWlmIChlbXB0eSgk dmFycmF5Wydub3RlJ10pICYmICFlbXB0eSgkdmFycmF5WydhcnRpY2xlX3RpdGxlJ10pKQoJ CQl7CgkJCQkkdmFycmF5Wydub3RlJ10gPSAkdmFycmF5WydhcnRpY2xlX3RpdGxlJ107CgkJ CX0KCQl9Cgl9CgoJJGFydGljbGVpZCA9ICR2YXJyYXlbJ2FydGljbGVpZCddID0gZ3BzKCdh cnRpY2xlaWQnKTsKCglpZiAoZW1wdHkoJHJlcykpCgl7CgkJaWYgKCRzdGVwPT0naW1hZ2Vf dXBkYXRlJykKCQl7CgkJCWlmICh1cGRhdGVfbW9kZXJhdGVkX2NvbnRlbnQoJGlkLCBAJHZh cnJheVsnbm90ZSddLCAkdmFycmF5KSkgewoJCQkJJHJlcyA9ICJVcGRhdGUgbGluayAnJGlk JyI7CgoJCQkJLy8gcmVtb3ZlIHByZXZpb3VzbHkgdXBsb2FkZWQgZmlsZQoJCQkJJGRhdGEg PSBtZW1fbW9kZXJhdGlvbl9kZWNvZGUoJG1lbV9tb2RfaW5mb1snZGF0YSddKTsKCQkJCSR0 bXBmaWxlID0gQCRkYXRhWyd0bXBmaWxlJ107CgoJCQkJaWYgKGZpbGVfZXhpc3RzKCR0bXBm aWxlKQoJCQkJCSYmICR2YXJyYXlbJ3RtcGZpbGUnXSAhPSAkdG1wZmlsZQoJCQkJCSYmIHN0 cm5jbXAoYmFzZW5hbWUoJHRtcGZpbGUpLCBNRU1fTU9EX0FSVElDTEVfVE1QX0ZJTEVfUFJF RklYLCBzdHJsZW4oTUVNX01PRF9BUlRJQ0xFX1RNUF9GSUxFX1BSRUZJWCkpID09IDAgKQoJ CQkJewplY2hvICJhYm91dCB0byB1bmxpbmsgJHRtcGZpbGUiOwpkbXAoJHZhcnJheSk7CmV4 aXQoKTsKCQkJCQlAdW5saW5rKCR0bXBmaWxlKTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRy ZXMgPSAiRmFpbGVkIHRvIHVwZGF0ZSBsaW5rICckaWQnIjsKCQkJfQoJCX0KCQllbHNlCgkJ ewoJCQkkbW9kX3R5cGUgPSAhZW1wdHkoJGFydGljbGVpZCkgPyAnaW1hZ2UtZWRpdCcgOiAn aW1hZ2UnOwoJCQkkcmVzID0gc3VibWl0X21vZGVyYXRlZF9jb250ZW50KCRtb2RfdHlwZSwg JGVtYWlsLCBAJHZhcnJheVsnbm90ZSddLCAkdmFycmF5LCAkYXJ0aWNsZWlkKTsKCgkJCWlm ICgkcmVzKSB7CgkJCQkkcmVzID0gJyc7IC8vIlN1Ym1pdHRlZCBJbWFnZSAnJHJlcyciOwoJ CQl9IGVsc2UgewoJCQkJJHJlcyA9ICJGYWlsZWQgdG8gc3VibWl0IGltYWdlIjsKCQkJfQoJ CX0KCX0KCgoJaWYgKGVtcHR5KCRyZXMpKQoJCSRtZW1fbW9kaW1nX2luZm8gPSAkdmFycmF5 OwoKCXJldHVybiAkcmVzOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ZnVuY3Rpb24gbW9kaW1nX2ltZygkYXR0cykgewoJZ2xvYmFsICRtZW1fbW9kaW1nX2luZm8s JGltZ19kaXIsJG1lbV9tb2RfaW5mbzsKCglpZiAoaXNfYXJyYXkoJG1lbV9tb2RpbWdfaW5m bykpCgkJZXh0cmFjdCgkbWVtX21vZGltZ19pbmZvKTsKCWVsc2UgaWYgKGlzX2FycmF5KCRt ZW1fbW9kX2luZm8pIGFuZCBhcnJheV9rZXlfZXhpc3RzKCdkYXRhJywkbWVtX21vZF9pbmZv KSkKCQlleHRyYWN0KG1lbV9tb2RlcmF0aW9uX2RlY29kZSgkbWVtX21vZF9pbmZvWydkYXRh J10pKTsKCglpZiAoaXNzZXQoJHRtcGZpbGVuYW1lKSBhbmQgIWVtcHR5KCR0bXBmaWxlbmFt ZSkpCgkJcmV0dXJuICc8aW1nIHNyYz0iJy5odS4kaW1nX2Rpci4nLycuJHRtcGZpbGVuYW1l LiciJy4KCQkJCSghZW1wdHkoJHcpID8gJyB3aWR0aD0iJy4kdy4nIic6JycpIC4KCQkJCSgh ZW1wdHkoJGgpID8gJyBoZWlnaHQ9IicuJGguJyInOicnKSAuICcgLz4nOwp9CgoKZnVuY3Rp b24gbWVtX21vZGVyYXRpb25faW1hZ2VfcHJlc2VudGVyX2ltZygpCnsKCWdsb2JhbCAkdGVt cGRpcjsKCgkkdGVtcGZpbGUgPSBncHMoJ2YnKTsKCgkvLyByZXN0cmljdCBmaWxlIHNlcnZp bmcKCWlmIChzdHJuY21wKCR0ZW1wZmlsZSwgTUVNX01PRF9BUlRJQ0xFX1RNUF9GSUxFX1BS RUZJWCwgc3RybGVuKE1FTV9NT0RfQVJUSUNMRV9UTVBfRklMRV9QUkVGSVgpKSAhPSAwKQoJ ewoJCXR4cF9kaWUoJ05vdCBGb3VuZCcsIDQwNCk7Cgl9CgoJJGZpbGUgPSBidWlsZF9maWxl X3BhdGgoJHRlbXBkaXIsIHNhbml0aXplRm9yRmlsZSgkdGVtcGZpbGUpKTsKCglpZiAoZmls ZV9leGlzdHMoJGZpbGUpKQoJewoJCSRtaW1lID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVh bSc7CgoJCWhlYWRlcignQ29udGVudC1UeXBlOiAnIC4gJG1pbWUpOwoJCWhlYWRlcignQ29u dGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuICR0ZW1wZmlsZSk7 CgkJcmVhZGZpbGUoJGZpbGUpOwoJfQoJZWxzZQoJewoJCXR4cF9kaWUoJ05vdCBGb3VuZCcs IDQwNCk7Cgl9Cn0KCmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9uX2ltYWdlX3ByZXBfZGF0YSgk ZGF0YSkKewoJZ2xvYmFsICRpbWdfZGlyLCAkaW1hZ2VfdmFycywgJHByZWZzLCAkY29tbWVu dHNfb25fZGVmYXVsdCwgJHRlbXBkaXI7CgoJJGNyZWF0ZV9hcnRpY2xlID0gQCRwcmVmc1sn bWVtX21vZF9pbWdfd3JhcF93aXRoX2FydGljbGUnXTsKCSR3cmFwX2RlZmF1bHQgPSBAJHBy ZWZzWydtZW1fbW9kX2ltZ193cmFwX2RlZmF1bHQnXTsKCglpZiAoZW1wdHkoJGRhdGFbJ2Fy dGljbGVfYW5ub3RhdGUnXSkpICRkYXRhWydhcnRpY2xlX2Fubm90YXRlJ10gPSAkY29tbWVu dHNfb25fZGVmYXVsdDsKCglpZiAoZW1wdHkoJGRhdGFbJ2FydGljbGVfdGl0bGUnXSkpICRk YXRhWydhcnRpY2xlX3RpdGxlJ10gPSBAJGRhdGFbJ2FsdCddOwoJaWYgKGVtcHR5KCRkYXRh WydhcnRpY2xlX2JvZHknXSkpICRkYXRhWydhcnRpY2xlX2JvZHknXSA9IEAkZGF0YVsnY2Fw dGlvbiddOwoJaWYgKGVtcHR5KCRkYXRhWydhcnRpY2xlX2V4Y2VycHQnXSkpICRkYXRhWydh cnRpY2xlX2V4Y2VycHQnXSA9ICcnOwoJaWYgKGVtcHR5KCRkYXRhWydhcnRpY2xlX3VzZXIn XSkpICRkYXRhWydhcnRpY2xlX3VzZXInXSA9ICFlbXB0eSgkZGF0YVsnYXV0aG9yJ10pID8g JGRhdGFbJ2F1dGhvciddIDogQCRkYXRhWyd1c2VyJ107CglpZiAoZW1wdHkoJGRhdGFbJ2Fy dGljbGVfd3JhcF9lbmFibGVkJ10pKSAkZGF0YVsnYXJ0aWNsZV93cmFwX2VuYWJsZWQnXSA9 ICR3cmFwX2RlZmF1bHQ7CgoJaWYgKCFlbXB0eSgkZGF0YVsndGhlZmlsZSddWyd0bXBfbmFt ZSddKSkKCXsKCQlpZiAoZW1wdHkoJGRhdGFbJ3RtcGZpbGVuYW1lJ10pKQoJCXsKCQkJJGRh dGFbJ3RtcGZpbGVuYW1lJ10gPSBNRU1fTU9EX0FSVElDTEVfVE1QX0ZJTEVfUFJFRklYIC4g YmFzZW5hbWUoJGRhdGFbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkgLiAkZGF0YVsndGhlZmls ZSddWyduYW1lJ107CgkJfQoKCQlpZiAoZW1wdHkoJGRhdGFbJ25hbWUnXSkpCgkJewoJCQkk ZGF0YVsnbmFtZSddID0gJGRhdGFbJ3RoZWZpbGUnXVsnbmFtZSddOwoJCX0KCgkJJGZpbGVu YW1lID0gKGVtcHR5KCRkYXRhWyd0bXBmaWxlJ10pID8gJHRlbXBkaXIgLiBEUyAuICRkYXRh Wyd0bXBmaWxlbmFtZSddIDogJGRhdGFbJ3RtcGZpbGUnXSk7CgoJCSRkaW1lbnNpb25zID0g Z2V0aW1hZ2VzaXplKCRmaWxlbmFtZSk7CgoJCSRkYXRhWyd3J10gPSAkZGltZW5zaW9uc1sw XTsKCQkkZGF0YVsnaCddID0gJGRpbWVuc2lvbnNbMV07Cgl9CgoJcmV0dXJuICRkYXRhOwp9 CgpmdW5jdGlvbiBtZW1fbW9kZXJhdGlvbl9pbWFnZV9wcmVzZW50ZXIoJHR5cGUsJGRhdGEp IHsKCWdsb2JhbCAkaW1nX2RpciwkaW1hZ2VfdmFycywkcHJlZnM7CgoJJGNyZWF0ZV9hcnRp Y2xlID0gQCRwcmVmc1snbWVtX21vZF9pbWdfd3JhcF93aXRoX2FydGljbGUnXTsKCSR3cmFw X2RlZmF1bHQgPSBAJHByZWZzWydtZW1fbW9kX2ltZ193cmFwX2RlZmF1bHQnXTsKCgkkb3V0 ID0gJyc7CgoJaWYgKCgkdHlwZT09J2ltYWdlJyB8fCAkdHlwZT09J2ltYWdlLWVkaXQnKSBh bmQgaXNfYXJyYXkoJGRhdGEpKQoJewoJCWV4dHJhY3QoZ2V0X3ByZWZzKCkpOwoKCQkkZGF0 YSA9IG1lbV9tb2RlcmF0aW9uX2ltYWdlX3ByZXBfZGF0YSgkZGF0YSk7CgoJCWV4dHJhY3Qo JGRhdGEpOwoKCQlpZiAoISRhcnRpY2xlX2Fubm90YXRlKSB7CgkJCSRhcnRpY2xlX2Fubm90 YXRlID0gJGNvbW1lbnRzX29uX2RlZmF1bHQ7CgkJfQoKCQlpZiAoZW1wdHkoJGFydGljbGVf YW5ub3RhdGVpbnZpdGUpKQoJCQkkYXJ0aWNsZV9hbm5vdGF0ZWludml0ZSA9ICRjb21tZW50 c19kZWZhdWx0X2ludml0ZTsKCgkJJHNlbGVjdHMgPSBldmVudF9jYXRlZ29yeV9wb3B1cCgi aW1hZ2UiLCBAJGNhdGVnb3J5LCAnJyk7CgkJJHRleHRhcmVhID0gJzx0ZXh0YXJlYSBuYW1l PSJjYXB0aW9uIiBjb2xzPSI0MCIgcm93cz0iNyIgdGFiaW5kZXg9IjQiPicuaHRtbHNwZWNp YWxjaGFycyhAJGNhcHRpb24pLic8L3RleHRhcmVhPic7CgoJCWlmIChpc3NldCgkdG1wZmls ZW5hbWUpKQoJCQkkaW1ndGFnID0gJzxpbWcgc3JjPSInLm1lbV9tb2RlcmF0aW9uX2ltYWdl X3RlbXB1cmwoJHRtcGZpbGVuYW1lKS4nIiB3aWR0aD0iJy4kZGF0YVsndyddLiciIGhlaWdo dD0iJy4kZGF0YVsnaCddLiciIC8+JzsKCgkJJG91dCA9IHN0YXJ0VGFibGUoICdlZGl0JyAp IC4KCQkJCShpc3NldCgkaW1ndGFnKSA/IHRyKCB0ZGNzKCBAJGltZ3RhZywgMikgKSA6ICcn KS4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnbmFtZScgKSAuIGZJbnB1dENlbGwoICduYW1lJywg QCRuYW1lLCAxLCAzMCApKSAuCgkJCQl0ciggZkxhYmVsQ2VsbCggJ2FsdCcpIC5mSW5wdXRD ZWxsKCAnYWx0JywgQCRhbHQsIDIsIDE1ICkpIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnaW1h Z2VfY2F0ZWdvcnknLCAnY2F0ZWdvcnknICkgLiB0ZCggJHNlbGVjdHMgKSApIC4KCQkJCShp c3NldCgkdykgPyB0ciggZkxhYmVsQ2VsbCggJ2ltYWdlX2RpbWVuc2lvbnMnICkgLiB0ZCgg QCR3IC4gJ3gnIC4gQCRoICkgKSA6ICcnKS4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnY2FwdGlv bicgKSAuIHRkYSggJHRleHRhcmVhLCAnIHZhbGlnbj0idG9wIicgKSApIC4KCQkJCSgkY3Jl YXRlX2FydGljbGUgPyB0ciggZkxhYmVsQ2VsbCggJ2FydGljbGVfd3JhcCcgKSAuIHRkYSgg eWVzbm9SYWRpbygnYXJ0aWNsZV93cmFwX2VuYWJsZWQnLCAkYXJ0aWNsZV93cmFwX2VuYWJs ZWQpICkpIDogJycpIC4KCQkJCWVuZFRhYmxlKCk7CgoKCgoJCWlmIChlbXB0eSgkc2VjdGlv bikpICRzZWN0aW9uID0gZ2V0RGVmYXVsdFNlY3Rpb24oKTsKCQkkcnMgPSBzYWZlX2NvbHVt bigibmFtZSIsICJ0eHBfc2VjdGlvbiIsICJuYW1lIT0nZGVmYXVsdCciKTsKCgkJJHNlY3Rp b25fc2VsZWN0ID0gKCRycykgPyBzZWxlY3RJbnB1dCgiYXJ0aWNsZV9zZWN0aW9uIiwgJHJz LCBAJGFydGljbGVfc2VjdGlvbikgOiAnJzsKCgkJJG91dCAuPSAnPGgzPicuZ1R4dCgnYXJ0 aWNsZScpLic8L2gzPic7CgoJCSRvdXQgLj0gJzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2Vs bHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgaWQ9ImVkaXQyIiBhbGlnbj0iY2VudGVyIiAnLgoJ CQkJKCEoJGNyZWF0ZV9hcnRpY2xlICYmICRhcnRpY2xlX3dyYXBfZW5hYmxlZCkgPyAnc3R5 bGU9ImRpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbjsiJzonJykuJz4nIC4KCQkJCXRy KCB0ZGNzKCAnPGgzPicuZ1R4dCgnYXJ0aWNsZScpIC4nPC9oMz4nLCAyKSApIC4KCQkJCXRy KCBmTGFiZWxDZWxsKCAndGl0bGUnICkgLiBmSW5wdXRDZWxsKCAnYXJ0aWNsZV90aXRsZScs ICRhcnRpY2xlX3RpdGxlLCAxLCAzMCApKSAuCgkJCQkoZW1wdHkoJHNlY3Rpb25fc2VsZWN0 KSA/ICcnIDogdHIoIGZMYWJlbENlbGwoICdzZWN0aW9uJyApIC4gdGRhKCAkc2VjdGlvbl9z ZWxlY3QgKSApKSAuCgkJCQl0ciggZkxhYmVsQ2VsbCggJ2NhdGVnb3JpemUnICkgLiB0ZGEo IGNhdGVnb3J5X3BvcHVwKCJhcnRpY2xlX2NhdGVnb3J5MSIsIEAkYXJ0aWNsZV9jYXRlZ29y eTEsICcnKSAuYnIuIGNhdGVnb3J5X3BvcHVwKCJhcnRpY2xlX2NhdGVnb3J5MiIsIEAkYXJ0 aWNsZV9jYXRlZ29yeTIsICcnKSApICkgLgoJCQkJdHIoIGZMYWJlbENlbGwoICdzdGF0dXMn ICkgLiB0ZGEoIHNlbGVjdElucHV0KCdhcnRpY2xlX3N0YXR1cycsIGFycmF5KDE9PidEcmFm dCcsMj0+J0hpZGRlbicsMz0+J1BlbmRpbmcnLDQ9PidMaXZlJyw1PT4nU3RpY2t5JyksNCkg KSApIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnYm9keScgKSAuIHRkYSggJzx0ZXh0YXJlYSBu YW1lPSJhcnRpY2xlX2JvZHkiIGNvbHM9IjQwIiByb3dzPSI3Ij4nLmh0bWxzcGVjaWFsY2hh cnMoJGFydGljbGVfYm9keSkuJzwvdGV4dGFyZWE+JywgJyB2YWxpZ249InRvcCInICkgKSAu CgkJCQl0ciggZkxhYmVsQ2VsbCggJ2V4Y2VycHQnICkgLiB0ZGEoICc8dGV4dGFyZWEgbmFt ZT0iYXJ0aWNsZV9leGNlcnB0IiBjb2xzPSI0MCIgcm93cz0iMyI+Jy5odG1sc3BlY2lhbGNo YXJzKCRhcnRpY2xlX2V4Y2VycHQpLic8L3RleHRhcmVhPicsICcgdmFsaWduPSJ0b3AiJyAp ICkgLgoJCQkJdHIoIGZMYWJlbENlbGwoICdhbm5vdGF0ZScgKSAuIHRkYSggeWVzbm9SYWRp bygnYXJ0aWNsZV9hbm5vdGF0ZScsJGFydGljbGVfYW5ub3RhdGUpICkgKSAuCgkJCQl0cigg ZkxhYmVsQ2VsbCggJ2Fubm90YXRlaW52aXRlJyApIC4gZklucHV0Q2VsbCggJ2FydGljbGVf YW5ub3RhdGVpbnZpdGUnLCAkYXJ0aWNsZV9hbm5vdGF0ZWludml0ZSwgMSwgMzAgKSkgLgoJ CQkJdHIoIGZMYWJlbENlbGwoICdrZXl3b3JkcycgKSAuIHRkYSggJzx0ZXh0YXJlYSBuYW1l PSJhcnRpY2xlX2tleXdvcmRzIiBjb2xzPSI0MCIgcm93cz0iMyI+Jy5odG1sc3BlY2lhbGNo YXJzKEAkYXJ0aWNsZV9rZXl3b3JkcykuJzwvdGV4dGFyZWE+JywgJyB2YWxpZ249InRvcCIn ICkgKSAuCgkJCQl0ciggZkxhYmVsQ2VsbCggJ292ZXJyaWRlX2RlZmF1bHRfZm9ybScgKSAu IHRkYShmb3JtX3BvcChAJGFydGljbGVfb3ZlcnJpZGVfZm9ybSwgJycpLnBvcEhlbHAoJ292 ZXJyaWRlX2Zvcm0nKSkpIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnYXV0aG9yJyApIC4gZklu cHV0Q2VsbCggJ2FydGljbGVfdXNlcicsICRhcnRpY2xlX3VzZXIsIDEsIDMwICkpIC4KCQkJ CSghaXNzZXQoJHRtcGZpbGVuYW1lKSA/CgkJCQkJdHIoIGZMYWJlbENlbGwoJ2FydGljbGVf aW1hZ2UnKSAuIGZJbnB1dENlbGwoJ2FydGljbGVfaW1hZ2UnLCBAJGFydGljbGVfaW1hZ2Us IDEsIDMwKSApCgkJCQkJOgoJCQkJCScnCgkJCQkpIC4KCQkJCScnOwoKCQkkY3VzdG9tX2Zp ZWxkcyA9IHNhZmVfcm93cygnbmFtZSwgdmFsLCBodG1sJywgJ3R4cF9wcmVmcycsICJuYW1l IGxpa2UgJ2N1c3RvbV8lX3NldCcgYW5kIGV2ZW50ID0gJ2N1c3RvbSciKTsKCgkJaWYgKCRj dXN0b21fZmllbGRzKQoJCXsKCQkJZm9yZWFjaCgkY3VzdG9tX2ZpZWxkcyBhcyAkZmllbGQp CgkJCXsKCQkJCWV4dHJhY3QoJGZpZWxkKTsKCgkJCQkkdHIgPSBmTGFiZWxDZWxsKCAkdmFs ICk7CgoJCQkJJGsgPSAnYXJ0aWNsZV8nIC4gaW1wbG9kZSgnXycsIGV4cGxvZGUoJ18nLCAk bmFtZSwgLTEpKTsKCgkJCQlzd2l0Y2ggKCRodG1sKQoJCQkJewoJCQkJCWNhc2UgJ3NlbGVj dCc6CgkJCQkJCS8vIGdldCB2YWx1ZXMKCQkJCQkJJGl0ZW1zID0gc2FmZV9jb2x1bW4oJ3Zh bHVlJywgJ2N1c3RvbV9maWVsZHMnLCAibmFtZSA9ICd7JG5hbWV9JyIpOwoKCQkJCQkJJHRy IC49IHRkYSgKCQkJCQkJCXNlbGVjdElucHV0KCRrLCAkaXRlbXMsIEAkJGspLAoJCQkJCQkJ JyBjbGFzcz0ibm9saW5lIicKCQkJCQkJKTsKCQkJCQkJYnJlYWs7CgkJCQkJZGVmYXVsdDoK CQkJCQkJJHRyIC49IGZJbnB1dENlbGwoICRrLCBAJCRrLCAxLCAzMCApOwoJCQkJCQlicmVh azsKCQkJCX0KCgkJCQkkb3V0IC49IHRyKCR0cik7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJ Zm9yKCRpPTE7JGk8PTIwOyRpKyspIHsKCQkJCSRrID0gImFydGljbGVfY3VzdG9tX3skaX0i OwoJCQkJJGtzZXQgPSAiY3VzdG9tX3skaX1fc2V0IjsKCQkJCWlmIChpc3NldCgkJGtzZXQp IGFuZCAhZW1wdHkoJCRrc2V0KSkKCQkJCXsKCQkJCQkkb3V0IC49IHRyKAlmTGFiZWxDZWxs KCBAJCRrc2V0ICkgLiBmSW5wdXRDZWxsKCAkaywgQCQkaywgMSwgMzAgKSApOwoJCQkJfQoJ CQl9CgkJfQoKCgkJJG91dCAuPSBlbmRUYWJsZSgpOwoJCSRvdXQgLj0gaElucHV0KCd0bXBm aWxlbmFtZScsQCR0bXBmaWxlbmFtZSk7CgkJJG91dCAuPSBoSW5wdXQoJ2F1dGhvcicsICR1 c2VyKTsKCQkkb3V0IC49IGhJbnB1dCgndycsQCR3KTsKCQkkb3V0IC49IGhJbnB1dCgnaCcs QCRoKTsKCgkJaWYgKCR0eXBlID09ICdpbWFnZS1lZGl0JykKCQl7CgkJCSRvdXQgLj0gaElu cHV0KCdhcnRpY2xlaWQnLCBAJGFydGljbGVpZCk7CgkJfQoJfQoKCXJldHVybiAkb3V0Owp9 CgpmdW5jdGlvbiBtZW1fbW9kZXJhdGlvbl9pbWFnZV9hcHByb3ZlcigkdHlwZSwgJGRhdGEp CnsKCWdsb2JhbCAkcHJlZnM7CgoJJGlzX25ldyA9ICR0eXBlPT0naW1hZ2UnOwoJJGlzX2Vk aXQgPSAkdHlwZT09J2ltYWdlLWVkaXQnOwoKCS8vIGdldCB0aGUgYXJ0aWNsZV9pbWFnZSBy ZWNvcmQgYW5kIG51bWJlciBvZiBhcnRpY2xlcyByZWZlcmVuY2luZyBpdAoJJG9sZF9pbWFn ZV9pZCA9ICFlbXB0eSgkZGF0YVsnYXJ0aWNsZWlkJ10pID8gc2FmZV9maWVsZCgnSW1hZ2Un LCAndGV4dHBhdHRlcm4nLCAiSUQgPSAiIC4gZG9TbGFzaCgkZGF0YVsnYXJ0aWNsZWlkJ10p KSA6IGZhbHNlOwoJaWYgKCRpc19lZGl0ICYmICRvbGRfaW1hZ2VfaWQpCgl7CgkJJG9sZF9p bWFnZSA9IHNhZmVfcm93KCcqJywgJ3R4cF9pbWFnZScsICJpZCA9IHskb2xkX2ltYWdlX2lk fSIpOwoKCQkkb2xkX2ltYWdlX2NvdW50ID0gISRvbGRfaW1hZ2UgPyAwIDoKCQkJc2FmZV9j b3VudCgndGV4dHBhdHRlcm4nLCAiSW1hZ2UgPSAneyRvbGRfaW1hZ2VfaWR9JyIpOwoJfQoJ ZWxzZQoJewoJCSRvbGRfaW1hZ2UgPSBmYWxzZTsKCQkkb2xkX2ltYWdlX2NvdW50ID0gMDsK CX0KCglpZiAoKCRpc19uZXcgfHwgJGlzX2VkaXQpICYmIGlzX2FycmF5KCRkYXRhKSkKCXsK CQkkZGF0YSA9IG1lbV9tb2RlcmF0aW9uX2ltYWdlX3ByZXBfZGF0YSgkZGF0YSk7CgoJCWlm IChlbXB0eSgkZGF0YVsndG1wZmlsZW5hbWUnXSkgJiYgIWVtcHR5KCRkYXRhWyd0aGVmaWxl J10pKQoJCXsKCQkJJGRhdGFbJ3RtcGZpbGVuYW1lJ10gPSBNRU1fTU9EX0FSVElDTEVfVE1Q X0ZJTEVfUFJFRklYIC4gYmFzZW5hbWUoJGRhdGFbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkg LiAkZGF0YVsndGhlZmlsZSddWyduYW1lJ107CgkJfQoKCQlpZiAoQGVtcHR5KCRkYXRhWydl eHQnXSkpCgkJewoJCQkkdG1wbmFtZSA9ICRkYXRhWyd0bXBmaWxlbmFtZSddOwoJCQkkcG9z ID0gc3RycnBvcygkdG1wbmFtZSwgJy4nKTsKCgkJCWlmICgkcG9zICE9PSBmYWxzZSkKCQkJ ewoJCQkJJGRhdGFbJ2V4dCddID0gc3Vic3RyKCR0bXBuYW1lLCAkcG9zLCBzdHJsZW4oJHRt cG5hbWUpLSRwb3MpOwoJCQl9CgkJfQoKCQlpZiAoZW1wdHkoJGRhdGFbJ2F1dGhvciddKSAm JiAhZW1wdHkoJGRhdGFbJ3VzZXInXSkpCgkJewoJCQkkZGF0YVsnYXV0aG9yJ10gPSAkZGF0 YVsndXNlciddOwoJCX0KCgkJZXh0cmFjdCgkZGF0YSk7CgoJCSRyc190cmFucyA9IHNhZmVf cXVlcnkoIlNUQVJUIFRSQU5TQUNUSU9OIik7CgoJCWlmICghZW1wdHkoJHRtcGZpbGVuYW1l KSkKCQl7CgkJCS8vIGluc2VydCByZWNvcmQKCQkJJHEgPSBzYWZlX2luc2VydCgidHhwX2lt YWdlIiwKCQkJICAgIm5hbWUJICAgID0gJyIuZG9TbGFzaCgkbmFtZSkuIicsCgkJCQljYXRl Z29yeSAgICA9ICciLmRvU2xhc2goJGNhdGVnb3J5KS4iJywKCQkJCWV4dAkJCT0gJyRleHQn LCIKCQkJCS4oIWVtcHR5KCR3KSA/IncJCQk9ICR3LCIgOiAnJykKCQkJCS4oIWVtcHR5KCRo KSA/ImgJCQk9ICRoLCIgOiAnJykKCQkJCS4iCgkJCQlhbHQgICAgICAgICA9ICciLmRvU2xh c2goQCRhbHQpLiInLAoJCQkJY2FwdGlvbiAgICAgPSAnIi5kb1NsYXNoKEAkY2FwdGlvbiku IicsCgkJCQlkYXRlCQk9IG5vdygpLAoJCQkJYXV0aG9yCQk9ICciLmRvU2xhc2goJGF1dGhv cikuIiciCgkJCSk7CgoJCQkvLyBnZXQgaWQKCQkJJGlkID0gbXlzcWxfaW5zZXJ0X2lkKCk7 CgoJCQlpZiAoJHE9PT1mYWxzZSkgewoJCQkJc2FmZV9xdWVyeSgiUk9MTEJBQ0siKTsKCQkJ CXJldHVybiAnZmFpbGVkIHRvIGluc2VydCBpbWFnZSc7CgkJCX0KCgkJCS8vIGxpbmsgaW1h Z2UgdG8gd3JhcHBlciBhcnRpY2xlCgkJCSRkYXRhWydhcnRpY2xlX2ltYWdlJ10gPSAkaWQ7 CgoJCQkvLyByZW1vdmUgdGhlIG9sZCwgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgaW1hZ2UKCQkJ aWYgKCRvbGRfaW1hZ2UgJiYgJG9sZF9pbWFnZV9jb3VudCA9PSAxKQoJCQl7CgkJCQlzYWZl X2RlbGV0ZSgndHhwX2ltYWdlJywgImlkID0gJ3skb2xkX2ltYWdlX2lkfSciKTsKCgkJCQkk b2xkX2V4dCA9ICRvbGRfaW1hZ2VbJ2V4dCddOwoJCQkJaWYgKGlzX2ZpbGUoSU1QQVRILiRv bGRfaW1hZ2VfaWQuJG9sZF9leHQpKQoJCQkJewoJCQkJCSR1bCA9IHVubGluayhJTVBBVEgu JG9sZF9pbWFnZV9pZC4kb2xkX2V4dCk7CgkJCQl9CgoJCQkJaWYgKGlzX2ZpbGUoSU1QQVRI LiRvbGRfaW1hZ2VfaWQuJ3QnLiRvbGRfZXh0KSkKCQkJCXsKCQkJCQkkdWx0ID0gdW5saW5r KElNUEFUSC4kb2xkX2ltYWdlX2lkLid0Jy4kb2xkX2V4dCk7CgkJCQl9CgkJCX0KCQl9CgkJ ZWxzZQoJCXsKCQkJJGlkID0gMDsKCQl9CgoJCWlmICgkYXJ0aWNsZV93cmFwX2VuYWJsZWQp CgkJewoJCQkkcmVzdWx0ID0gbW9kaW1nX3dyYXBfaW1hZ2UoJGRhdGEsICRpc19lZGl0KTsK CgkJCWlmICghZW1wdHkoJHJlc3VsdCkpIHsKCQkJCXNhZmVfcXVlcnkoIlJPTExCQUNLIik7 CgoJCQkJcmV0dXJuICdmYWlsZWQgdG8gaW5zZXJ0IGltYWdlIHdyYXBwZXInOwoJCQl9CgkJ fQoKCQlpZiAoJGlkKQoJCXsKCQkJLy8gd3JpdGUgZmlsZSB0byBpbWFnZXMgZm9sZGVyCgkJ CSRwYXRoID0gSU1QQVRIIC4gJGlkIC4gJGV4dDsKCQkJJHRtcGZpbGUgPSAkcHJlZnNbJ3Rl bXBkaXInXSAuIERTIC4gJHRtcGZpbGVuYW1lOwoKCQkJaWYgKGZpbGVfZXhpc3RzKCR0bXBm aWxlKSkgewoJCQkJaWYgKHNoaWZ0X3VwbG9hZGVkX2ZpbGUoJHRtcGZpbGUsICRwYXRoKSkg ewoJCQkJCSRmYWlsZWQgPSBmYWxzZTsKCQkJCQljaG1vZCgkcGF0aCwgMDc1NSk7CgkJCQl9 IGVsc2UgewoJLy8JCQkJdW5saW5rKCR0bXBmaWxlKTsKCQkJCQlzYWZlX3F1ZXJ5KCJST0xM QkFDSyIpOwoJCQkJCXJldHVybiAnRmFpbGVkIHRvIG1vdmUgaW1hZ2UgZmlsZSc7CgkJCQl9 CgkJCX0gZWxzZSB7CgkJCQlzYWZlX3F1ZXJ5KCJST0xMQkFDSyIpOwoJCQkJcmV0dXJuICJJ bWFnZSBmaWxlICd7JHRtcGZpbGV9JyBkb2VzIG5vdCBleGlzdC4iOwoJCQl9CgkJfQoKCQkk YXJ0aWNsZSA9IHNhZmVfcm93KCcqJywgJ3RleHRwYXR0ZXJuJywgIklEID0gJyIuJGRhdGFb J2FydGljbGVpZCddLiInIik7CgoJCS8vIGNvbW1pdCBpdCBhbGwuIHRodW1ibmFpbCBpcyBu b3QgY3JpdGljYWwKCQlzYWZlX3F1ZXJ5KCJDT01NSVQiKTsKCgkJaWYgKCRpZCkKCQl7CgkJ CS8vIGdldCB0aHVtYm5haWwgZGltZW5pb25zCgkJCWxpc3QoJHRfd2lkdGgsJHRfaGVpZ2h0 KSA9IG1vZGltZ19nZXRfaW1hZ2VfZGltZW5zaW9ucyh0cnVlKTsKCQkJJHRfY3JvcCA9ICRw cmVmc1snbWVtX21vZF9pbWdfdGh1bWJuYWlsX2Nyb3AnXTsKCgkJCSR0ID0gbmV3IHR4cF90 aHVtYiggJGlkICk7CgkJCSR0LT5jcm9wID0gKCR0X2Nyb3AgPT0gJzEnKTsKCQkJJHQtPmhp bnQgPSAnMCc7CgkJCWlmICggaXNfbnVtZXJpYygkdF93aWR0aCkgJiYgaXNfbnVtZXJpYygk dF9oZWlnaHQpICkgewoJCQkJaWYgKCR3ID4gJGgpCgkJCQkJJHQtPndpZHRoID0gJHRfd2lk dGg7CgkJCQllbHNlCgkJCQkJJHQtPmhlaWdodCA9ICR0X2hlaWdodDsKCQkJfQoKCQkJaWYg KCEkdC0+d3JpdGUoKSkgewoJCQkJcmV0dXJuICdGYWlsZWQgdG8gY3JlYXRlIHRodW1ibmFp bCc7CgkJCX0KCQl9Cgl9Cn0KCmZ1bmN0aW9uIG1vZGltZ193cmFwX2ltYWdlKCRkYXRhLCAk aXNfdXBkYXRlPWZhbHNlKQp7CgkkYXJ0aWNsZV9kYXRhID0gYXJyYXkoKTsKCglmb3JlYWNo ICgkZGF0YSBhcyAka2V5ID0+ICR2YWwpCgl7CgkJaWYgKHN0cm5jbXAoJ2FydGljbGVfJywk a2V5LDgpPT0wKQoJCQkkYXJ0aWNsZV9kYXRhW3N1YnN0cigka2V5LDgpXSA9ICR2YWw7Cgl9 CgoJJGFydGljbGVfdHlwZSA9ICRpc191cGRhdGUgPyAnYXJ0aWNsZS1lZGl0JyA6ICdhcnRp Y2xlJzsKCglpZiAoJGlzX3VwZGF0ZSkKCQkkYXJ0aWNsZV9kYXRhWydhcnRpY2xlaWQnXSA9 ICRkYXRhWydhcnRpY2xlaWQnXTsKCglyZXR1cm4gbWVtX2FydGljbGVfYXBwcm92ZXIoJGFy dGljbGVfdHlwZSwgJGFydGljbGVfZGF0YSk7Cn0KCmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9u X2ltYWdlX3JlamVjdGVyKCR0eXBlLCAkZGF0YSkKewoJaWYgKCgkdHlwZT09J2ltYWdlJyB8 fCAkdHlwZT09J2ltYWdlLWVkaXQnKSBhbmQgaXNfYXJyYXkoJGRhdGEpKSB7CgkJZXh0cmFj dCgkZGF0YSk7CgoJCSRwcmVmaXggPSBNRU1fTU9EX0FSVElDTEVfVE1QX0ZJTEVfUFJFRklY OwoJCSRsZW4gPSBzdHJsZW4oTUVNX01PRF9BUlRJQ0xFX1RNUF9GSUxFX1BSRUZJWCk7CgoJ CWlmIChAZmlsZV9leGlzdHMoJHRtcGZpbGUpIGFuZCBzdHJuY21wKCR0bXBmaWxlLCAkcHJl Zml4LCAkbGVuKSA9PSAwKQoJCXsKZWNobyAicmVqZWN0ZXIgYWJvdXQgdG8gdW5saW5rICR0 bXBmaWxlIjsKZG1wKCRkYXRhKTsKZXhpdCgpOwoJCQkvLyByZW1vdmUgdGhlIHJlamVjdGVk IGltYWdlIGZpbGUKCQkJdW5saW5rKCR0bXBmaWxlKTsKCQl9Cgl9Cn0KCmlmIChAdHhwaW50 ZXJmYWNlPT0ncHVibGljJykKewoJZnVuY3Rpb24gbWVtX21vZGVyYXRpb25faW1hZ2VfdXJs X3ByZXZpZXcoKQoJewoJCWdsb2JhbCAkcHJldGV4dDsKCgkJaWYgKHN0cmlwb3MoJHByZXRl eHRbJ3JlcXVlc3RfdXJpJ10sICcvdGVtcC1pbWFnZS1wcmV2aWV3LycpICE9PSBGQUxTRSkK CQl7CgkJCW1lbV9tb2RlcmF0aW9uX2ltYWdlX3ByZXNlbnRlcl9pbWcoKTsKCQl9Cgl9CgoJ cmVnaXN0ZXJfY2FsbGJhY2soJ21lbV9tb2RlcmF0aW9uX2ltYWdlX3VybF9wcmV2aWV3Jywg J3ByZXRleHRfZW5kJyk7CgoJZnVuY3Rpb24gbWVtX2ltYWdlX3ByZXZpZXdfdXJsKCRhdHRz KQoJewoJCWdsb2JhbCAkbWVtX21vZGFydGljbGVfaW5mbywgJGltZ19kaXI7CgoJCSR0aHVt Ym5haWwgPSAhZW1wdHkoJGF0dHNbJ3RodW1ibmFpbCddKSAmJiAkYXR0c1sndGh1bWJuYWls J10gPT0gJzAnOwoKCQkkdG1wX25hbWUgPSBAJG1lbV9tb2RhcnRpY2xlX2luZm9bJ3RtcGZp bGVuYW1lJ107CgkJJGFfaW1hZ2UgPSBAJG1lbV9tb2RhcnRpY2xlX2luZm9bJ2FydGljbGVf aW1hZ2UnXTsKCgkJaWYgKCFlbXB0eSgkdG1wX25hbWUpICYmIHN0cmNtcCgkdG1wX25hbWUs IE1FTV9NT0RfQVJUSUNMRV9UTVBfRklMRV9QUkVGSVgpICE9IDApCgkJewoJCQlyZXR1cm4g JzxpbWcgc3JjPSIuL3RlbXAtaW1hZ2UtcHJldmlldy8/Zj0nIC4gJG1lbV9tb2RhcnRpY2xl X2luZm9bJ3RtcGZpbGVuYW1lJ10uICciIC8+JzsKCQl9CgkJZWxzZWlmICghZW1wdHkoJGFf aW1hZ2UpKQoJCXsKCQkJJGlkID0gYXNzZXJ0X2ludCgkYV9pbWFnZSk7CgoJCQkkZXh0ID0g c2FmZV9maWVsZCgnZXh0JywgJ3R4cF9pbWFnZScsICJpZCA9ICRpZCIpOwoKCQkJJHRodW1i ID0gJHRodW1ibmFpbCA/ICd0JyA6ICcnOwoJCQlyZXR1cm4gJzxpbWcgc3JjPSInLmh1LiRp bWdfZGlyLicvJy4kaWQuJHRodW1iLiRleHQuJyIgLz4nOwoJCX0KCQlyZXR1cm4gJyc7Cgl9 Cn0KIjtzOjg6ImhlbHBfcmF3IjtzOjc5OToiaDEuIEltYWdlIE1vZGVyYXRpb24KCnAuIFRo aXMgbW9kZXJhdGlvbiBwbHVnaW4gYWxsb3dzIHVzZXJzIHRvIHN1Ym1pdCBpbWFnZXMgaW4g dG8gdGhlIG1vZGVyYXRpb24gcXVldWUuIElmIHRoZSBwbHVnaW4gbWVtX21vZGVyYXRpb25f YXJ0aWNsZSBpcyBpbnN0YWxsZWQsIHRoZW4gdGhlc2UgaW1hZ2VzIGNhbiBiZSB3cmFwcGVk IGluIGEgbmV3IGFydGljbGUuCgpoMihzZWN0aW9uIGxpY2Vuc2UpLiBMaWNlbnNlCgpwLiBU aGlzIHBsdWdpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgIkdQTHYyIjpodHRwOi8vd3d3LmZz Zi5vcmcvbGljZW5zaW5nL2xpY2Vuc2VzL2luZm8vR1BMdjIuaHRtbC4KCmgyKHNlY3Rpb24g aW5zdGFsbGF0aW9uKS4gSW5zdGFsbGF0aW9uCgpwLiBUaGlzIHBsdWdpbiByZXF1aXJlcyB0 aGUgcGx1Z2lucyBtZW1fZm9ybSB2ZXJzaW9uIDAuNS4yKywgbWVtX2FkbWluX3BhcnNlIGFu ZCBtZW1fbW9kZXJhdGlvbiB0byBmdW5jdGlvbiBwcm9wZXJseS4KCnAuICJTdGFydCBJbnN0 YWxsIFdpemFyZCI6Li9pbmRleC5waHA/ZXZlbnQ9aW1hZ2VfbW9kZXJhdGUmc3RlcD1wcmVp bnN0YWxsCgpoMihzZWN0aW9uIGV4YW1wbGVzKS4gRXhhbXBsZXMKCnAuIFNlZSBmb3JtIG1v ZF9pbWFnZV9mb3JtIGZvciBhbiBleGFtcGxlIHVzaW5nIG5vcm1hbCBpbWFnZSB1cGxvYWQu CgpwLiBTZWUgZm9ybSBtb2RfaW1hZ2VfYXJ0aWNsZV9mb3JtIGZvciBhbiBleGFtcGxlIHRo YXQgd2lsbCB1cGxvYWQgYW4gaW1hZ2UgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIGEgbmV3bHkg Y3JlYXRlZCBhcnRpY2xlLiI7czozOiJtZDUiO3M6MzI6ImMyOGUyMWFmOWY4NjljYzc2NTg3 ZjViN2VlMTc2Yzk1Ijt9