# Name: geo_vote v0.1.4 # Type: Admin/Public side plugin # Voting - Poll Plugin # Author: Geoff Forster # URL: # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjg6Imdlb192b3RlIjtzOjY6ImF1dGhvciI7czoxMzoiR2Vv ZmYgRm9yc3RlciI7czoxMDoiYXV0aG9yX3VyaSI7czowOiIiO3M6NzoidmVyc2lvbiI7czo1 OiIwLjEuNCI7czoxMToiZGVzY3JpcHRpb24iO3M6MjA6IlZvdGluZyAtIFBvbGwgUGx1Z2lu IjtzOjQ6ImNvZGUiO3M6MjgxMjM6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsN CglhZGRfcHJpdnMoJ2dlb192b3RlJywnMScpOw0KDQoJLy8gRXh0ZW5zaW9ucyB0YWINCgly ZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnZ2VvX3ZvdGUnLCBnZW9fdm90ZV9nVHh0KCdn ZW9fdm90ZScpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnZ2VvX3ZvdGUnLCAnZ2VvX3ZvdGUn KTsNCn0NCg0KaWYgKCFkZWZpbmVkKCdHRU9fVk9URV9DSEVBVCcpKSB7DQoJZGVmaW5lKCJH RU9fVk9URV9DSEVBVCIsICdnZW9fdm90ZV9jaGVhdCcpOw0KfQ0KaWYgKCFkZWZpbmVkKCdH RU9fVk9URV9NRVRBJykpIHsNCglkZWZpbmUoIkdFT19WT1RFX01FVEEiLCAnZ2VvX3ZvdGVf bWV0YScpOw0KfQ0KaWYgKCFkZWZpbmVkKCdHRU9fVk9URV9GT1JNJykpIHsNCglkZWZpbmUo IkdFT19WT1RFX0ZPUk0iLCAnZ2VvX3ZvdGVfZm9ybScpOw0KfQ0KLy8gKioqKioqKioqKioq KioqKioqKioqKioqDQovLyBWb3RlIENPTkZJR1VSQVRJT04NCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gVGFiIGhhbmRsZXINCmZ1bmN0aW9uIGdlb192b3RlKCRldmVudCwg JHN0ZXApIHsNCiRhdmFpbGFibGVfc3RlcHMgPSBhcnJheSgNCgkJCSdnZW9fdm90ZV9tZXRh X2FkZCcgCT0+IGZhbHNlLA0KCQkJJ2dlb192b3RlX21ldGFfZGVsJyAJPT4gdHJ1ZSwNCgkJ CSdnZW9fdm90ZV9tZXRhX3NhdmUnIAk9PiB0cnVlDQoJCQkpOw0KCWlmKCEkc3RlcCBvciAh Ym91bmNlcigkc3RlcCwgJGF2YWlsYWJsZV9zdGVwcykpIHsNCgkJCWdlb192b3RlX2NvbmZp ZygnJyk7DQogICAgICAgICAgICB9DQoJZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGdlb192b3RlX2NvbmZpZygkbWVzc2FnZSkg ew0KCWlmICghZ2VvX3ZvdGVfdGFibGVfZXhpc3QoKSkgew0KCQlnZW9fdm90ZV9pbnN0YWxs KCcnKTsNCgkJZXhpdDsNCgl9DQoNCglwYWdldG9wKGdlb192b3RlX2dUeHQoJ2FkbWluX3Rh YicpLCAkbWVzc2FnZSk7DQoNCgllY2hvIGdlb192b3RlX21ldGFfZWRpdCgpOw0KCWVjaG8g Z2VvX3ZvdGVfbWV0YV9saXN0KCk7DQp9DQoNCg0KZnVuY3Rpb24gZ2VvX3ZvdGVfbWV0YV9l ZGl0KCkgew0KDQpnbG9iYWwgJGNoZWF0X21ldGhvZF90eXBlczsNCiRjaGVhdF9tZXRob2Rf dHlwZXMgPSBhcnJheSgNCgkJJ2Nvb2tpZScgPT4gJ2Nvb2tpZScsDQoJCSdpcCcgPT4gJ2lw JywNCgkJJ2xvZ2luJyA9PiAnbG9naW4nDQoJCSk7DQpnbG9iYWwgJHNob3dfcmVzdWx0X3R5 cGVzOw0KJHNob3dfcmVzdWx0X3R5cGVzID0gYXJyYXkoDQoJCSdObycgPT4gJ05vJywNCgkJ J1llcycgPT4gJ1llcycNCgkpOw0KDQoJJHZhcnMgPSBhcnJheSgnc3RlcCcsICd2b3RlX2lk JywgJ3ZvdGVfdGl0bGUnLCAndm90ZV90aXRsZV9jbGFzcycsICdvcHRpb25fdGl0bGVfMScs ICdvcHRpb25fdGl0bGVfMicsICdvcHRpb25fdGl0bGVfMycsICdvcHRpb25fdGl0bGVfNCcs ICAnb3B0aW9uX3RpdGxlXzUnLCAnb3B0aW9uX3RpdGxlXzYnLCAnb3B0aW9uX3RpdGxlXzcn LCAnb3B0aW9uX3RpdGxlXzgnLCAnb3B0aW9uX3RpdGxlXzknLCAnb3B0aW9uX3RpdGxlXzEw JywgJ3ZvdGVfYmFyX2NvbG91cicsICdvcHRpb25fdGl0bGVfY2xhc3MnLCAnZW5kX2RhdGVf dGltZScsICdlbmRfZGF0ZV90aW1lX2NsYXNzJywgJ3ZvdGVfYnV0dG9uX2NsYXNzJywgJ3No b3dfcmVzdWx0cycsICdjaGVhdF9tZXRob2QnKTsNCgkkcnMgPSBhcnJheSgpOw0KCQ0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKCR2YXJzKSkpOw0KCWlmICgkdm90ZV9pZCAmJiAkc3RlcCA9 PSAnZ2VvX3ZvdGVfbWV0YV9lZGl0Jykgew0KCQkkcnMgPSBzYWZlX3JvdygnKicsIEdFT19W T1RFX01FVEEsICJ2b3RlX2lkID0gJHZvdGVfaWQiKTsNCgkJZXh0cmFjdCgkcnMpOw0KCX0N Cg0KCWlmICgkc3RlcCA9PSAnZ2VvX3ZvdGVfbWV0YV9zYXZlJyB8fCAkc3RlcCA9PSAnZ2Vv X3ZvdGVfbWV0YV9hZGQnIHx8ICRzdGVwID09ICdnZW9fdm90ZV9tZXRhX2RlbCcpIHsNCgkJ Zm9yZWFjaCAoJHZhcnMgYXMgJHZhcikgew0KCQkJJCR2YXIgPSAnJzsNCgkJfQ0KCX0NCg0K CSRjYXB0aW9uID0gZ2VvX3ZvdGVfZ1R4dCgoJHN0ZXAgPT0gJ2dlb192b3RlX21ldGFfZWRp dCcpID8gJ2dlb192b3RlX21ldGFfZWRpdCcgOiAnZ2VvX3ZvdGVfbWV0YV9hZGQnKTsNCg0K CS8vIE1ha2UgdGhlIG5hbWUvdmFsIHBhaXJzIGZvciBzZWxlY3RJbnB1dA0KCSRzZWx1ID0g YXJyYXkoKTsNCglmb3JlYWNoICgkc2hvd19yZXN1bHRfdHlwZXMgYXMgJHdpZHggPT4gJHd2 YWwpIHsNCgkJJHNlbHVbJHdpZHhdID0gJHd2YWw7DQoJfQ0KCSRzZWx2ID0gYXJyYXkoKTsN Cglmb3JlYWNoICgkY2hlYXRfbWV0aG9kX3R5cGVzIGFzICR3aWR4ID0+ICR3dmFsKSB7DQoJ CSRzZWx2WyR3aWR4XSA9ICR3dmFsOw0KCX0NCgkvL2FkZCBzb21lIGRlZmF1bHRzDQoJaWYg KCEkdm90ZV9iYXJfY29sb3VyKSAkdm90ZV9iYXJfY29sb3VyID0gJ0xpZ2h0Qmx1ZSc7DQoJ aWYgKCEkZW5kX2RhdGVfdGltZSkgJGVuZF9kYXRlX3RpbWUgPSAnMDAwMC0wMC0wMCAwMDow MDowMCc7DQoJaWYgKCEkc2hvd19yZXN1bHRzKSAkc2hvd19yZXN1bHRzID0gJ1llcyc7DQoJ aWYgKCEkY2hlYXRfbWV0aG9kKSAkY2hlYXRfbWV0aG9kID0gJ2Nvb2tpZSc7DQoJaWYgKCEk dm90ZV90aXRsZV9jbGFzcykgJHZvdGVfdGl0bGVfY2xhc3MgPSAndm90ZV90aXRsZV9jbGFz cyc7DQoJaWYgKCEkb3B0aW9uX3RpdGxlX2NsYXNzKSAkb3B0aW9uX3RpdGxlX2NsYXNzID0g J29wdGlvbl90aXRsZV9jbGFzcyc7DQoJaWYgKCEkZW5kX2RhdGVfdGltZV9jbGFzcykgJGVu ZF9kYXRlX3RpbWVfY2xhc3MgPSAnZW5kX2RhdGVfdGltZV9jbGFzcyc7DQoJaWYgKCEkdm90 ZV9idXR0b25fY2xhc3MpICR2b3RlX2J1dHRvbl9jbGFzcyA9ICd2b3RlX2J1dHRvbl9jbGFz cyc7DQoNCglyZXR1cm4gZm9ybSgNCgkJaGVkKCRjYXB0aW9uLCAzLCcgc3R5bGU9InRleHQt YWxpZ246IGNlbnRlcjsiJykuDQoNCgkJc3RhcnRUYWJsZSgnZWRpdCcsICcnLCAnZWRpdC1w YW5lJykuDQovL1RSIEJFTE9XIFdBUyAoJHZvdGVfaWQgJiYgJHN0ZXAgPT0gJ2dlb192b3Rl X21ldGFfZWRpdCcgPyB0ZChzdHJvbmcoJHZvdGVfaWQpKSA6IGZJbnB1dENlbGwoJ3ZvdGVf aWQnLCAkdm90ZV9pZCkpIG5lZWQgdG8gdGFrZSB0aGUgb3Igb3V0IGl0cyByZWR1bmRhbnQN CgkJdHIoDQoJCQkoJHZvdGVfaWQgJiYgJHN0ZXAgPT0gJ2dlb192b3RlX21ldGFfZWRpdCcg PyBmTGFiZWxDZWxsKCd2b3RlX2lkJykudGQoc3Ryb25nKCR2b3RlX2lkKSkgOiBmTGFiZWxD ZWxsKCcmbmJzcDsnKS5mTGFiZWxDZWxsKCcmbmJzcDsnKSkuDQp0ZChmTGFiZWxDZWxsKCcm bmJzcDsnKSkuDQp0ZChmTGFiZWxDZWxsKCcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnKSkNCgkJKS4N Cg0KCQl0cigNCgkJCWZMYWJlbENlbGwoJ1ZvdGUgVGl0bGUnKS4NCgkJCWZJbnB1dENlbGwo J3ZvdGVfdGl0bGUnLCAkdm90ZV90aXRsZSkNCgkJKS4NCi8vIGZ1dHVyZSA6LSBwdXQgbG9v cCBpbiBoZXJlDQoJCXRyKA0KCQkJZkxhYmVsQ2VsbCgnT3B0aW9uIDEgVGl0bGUnKS4NCgkJ CWZJbnB1dENlbGwoJ29wdGlvbl90aXRsZV8xJywgJG9wdGlvbl90aXRsZV8xKQ0KCQkpLg0K CQkNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCdPcHRpb24gMiBUaXRsZScpLg0KCQkJZklucHV0 Q2VsbCgnb3B0aW9uX3RpdGxlXzInLCAkb3B0aW9uX3RpdGxlXzIpDQoJCSkuDQoJCQkJDQoJ CXRyKA0KCQkJZkxhYmVsQ2VsbCgnT3B0aW9uIDMgVGl0bGUnKS4NCgkJCWZJbnB1dENlbGwo J29wdGlvbl90aXRsZV8zJywgJG9wdGlvbl90aXRsZV8zKQ0KCQkpLg0KCQkJCQ0KCQl0cigN CgkJCWZMYWJlbENlbGwoJ09wdGlvbiA0IFRpdGxlJykuDQoJCQlmSW5wdXRDZWxsKCdvcHRp b25fdGl0bGVfNCcsICRvcHRpb25fdGl0bGVfNCkNCgkJKS4NCgkJCQkNCgkJdHIoDQoJCQlm TGFiZWxDZWxsKCdPcHRpb24gNSBUaXRsZScpLg0KCQkJZklucHV0Q2VsbCgnb3B0aW9uX3Rp dGxlXzUnLCAkb3B0aW9uX3RpdGxlXzUpDQoJCSkuDQoJCQkJDQoJCXRyKA0KCQkJZkxhYmVs Q2VsbCgnT3B0aW9uIDYgVGl0bGUnKS4NCgkJCWZJbnB1dENlbGwoJ29wdGlvbl90aXRsZV82 JywgJG9wdGlvbl90aXRsZV82KQ0KCQkpLg0KCQkJCQ0KCQl0cigNCgkJCWZMYWJlbENlbGwo J09wdGlvbiA3IFRpdGxlJykuDQoJCQlmSW5wdXRDZWxsKCdvcHRpb25fdGl0bGVfNycsICRv cHRpb25fdGl0bGVfNykNCgkJKS4NCgkJCQkNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCdPcHRp b24gOCBUaXRsZScpLg0KCQkJZklucHV0Q2VsbCgnb3B0aW9uX3RpdGxlXzgnLCAkb3B0aW9u X3RpdGxlXzgpDQoJCSkuDQoJCQkJDQoJCXRyKA0KCQkJZkxhYmVsQ2VsbCgnT3B0aW9uIDkg VGl0bGUnKS4NCgkJCWZJbnB1dENlbGwoJ29wdGlvbl90aXRsZV85JywgJG9wdGlvbl90aXRs ZV85KQ0KCQkpLg0KCQkJCQ0KCQl0cigNCgkJCWZMYWJlbENlbGwoJ09wdGlvbiAxMCBUaXRs ZScpLg0KCQkJZklucHV0Q2VsbCgnb3B0aW9uX3RpdGxlXzEwJywgJG9wdGlvbl90aXRsZV8x MCkNCgkJKS4NCgkJDQoJCXRyKA0KCQkJZkxhYmVsQ2VsbCgnVm90ZSBCYXIgQ29sb3VyJyku DQoJCQlmSW5wdXRDZWxsKCd2b3RlX2Jhcl9jb2xvdXInLCAkdm90ZV9iYXJfY29sb3VyKS4N CgkJCXRkKGZMYWJlbENlbGwoJ2RlZmF1bHQgPSAjQUREOEU2IC8gTGlnaHRCbHVlIGluY2x1 ZGUgIyBvciB1c2UgYSB2YWxpZCBjb2xvciBuYW1lJykpDQoJCSkuDQoJCQkJDQoJCXRyKA0K CQkJZkxhYmVsQ2VsbCgnVm90ZSBDbG9zaW5nIERhdGUgJiBUaW1lJykuDQoJCQlmSW5wdXRD ZWxsKCdlbmRfZGF0ZV90aW1lJywgJGVuZF9kYXRlX3RpbWUpLg0KdGQoZkxhYmVsQ2VsbCgn Rm9ybWF0IFlZWVktTU0tREQgSEg6TU06U1MgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7JykpDQoJCSkuDQoJCQ0KCQkJCQ0KCQl0cigNCg0KCQkJZkxhYmVsQ2VsbCgnU2hvdyBS ZXN1bHRzIEJlZm9yZSBWb3RlIENsb3NlcycpLg0KCQkJdGQoc2VsZWN0SW5wdXQoJ3Nob3df cmVzdWx0cycsICRzZWx1LCAkc2hvd19yZXN1bHRzLCBmYWxzZSkpDQoJCSkuCQkNCgkJdHIo DQoJCQlmTGFiZWxDZWxsKCdWb3RpbmcgRnJhdWQgUHJldmVudGlvbiBNZXRob2QnKS4NCgkJ CXRkKHNlbGVjdElucHV0KCdjaGVhdF9tZXRob2QnLCAkc2VsdiwgJGNoZWF0X21ldGhvZCwg ZmFsc2UpKQ0KDQoJCSkuDQoJCXRyKA0KCQkJZkxhYmVsQ2VsbCgnPT09PT09PT09PT0nKQ0K CQkpLg0KCQkNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCdDU1MgY2xhc3NlcycpDQoJCSkuDQoJ CXRyKA0KCQkJZkxhYmVsQ2VsbCgndm90ZV90aXRsZV9jbGFzcycpLg0KCQkJZklucHV0Q2Vs bCgndm90ZV90aXRsZV9jbGFzcycsICR2b3RlX3RpdGxlX2NsYXNzKQ0KCQkpLg0KCQkNCgkJ dHIoDQoJCQlmTGFiZWxDZWxsKCdvcHRpb25fdGl0bGVfY2xhc3MnKS4NCgkJCWZJbnB1dENl bGwoJ29wdGlvbl90aXRsZV9jbGFzcycsICRvcHRpb25fdGl0bGVfY2xhc3MpDQoJCSkuDQoJ CQ0KCQkNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCdlbmRfZGF0ZV90aW1lX2NsYXNzJykuDQoJ CQlmSW5wdXRDZWxsKCdlbmRfZGF0ZV90aW1lX2NsYXNzJywgJGVuZF9kYXRlX3RpbWVfY2xh c3MpDQoJCSkuDQoJCQ0KCQkNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCd2b3RlX2J1dHRvbl9j bGFzcycpLg0KCQkJZklucHV0Q2VsbCgndm90ZV9idXR0b25fY2xhc3MnLCAkdm90ZV9idXR0 b25fY2xhc3MpDQoJCSkuDQoJCQ0KCQkNCgkJdHIoDQoJCQl0ZCgpLg0KCQkJdGQoDQoJCQkJ ZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpDQoJCQkpDQoJ CSkuDQoNCgkJZW5kVGFibGUoKS4NCg0KCQllSW5wdXQoJ2dlb192b3RlJykuDQoJCSgkdm90 ZV9pZCA/IGhJbnB1dCgndm90ZV9pZCcsICR2b3RlX2lkKS5zSW5wdXQoJ2dlb192b3RlX21l dGFfc2F2ZScpIDogc0lucHV0KCdnZW9fdm90ZV9tZXRhX2FkZCcpKQ0KCSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gZ2VvX3ZvdGVfbWV0YV9saXN0 KCkgew0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NvcnQnLCAnZGlyJywgJ2Ny aXQnLCAnc2VhcmNoX21ldGhvZCcpKSkpOw0KCWlmICgkc29ydCA9PT0gJycpICRzb3J0ID0g Z2V0X3ByZWYoJ2dlb192b3RlX21ldGFfc29ydF9jb2x1bW4nLCAndm90ZV9pZCcpOw0KCWlm ICgkZGlyID09PSAnJykgJGRpciA9IGdldF9wcmVmKCdnZW9fdm90ZV9tZXRhX3NvcnRfZGly JywgJ2FzYycpOw0KCSRkaXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2Rlc2MnIDogJ2FzYyc7 DQoNCglpZiAoIWluX2FycmF5KCRzb3J0LCBhcnJheSgndm90ZV9pZCcsICd2b3RlX3RpdGxl JywgJ3Nob3dfcmVzdWx0cycsICdjaGVhdF9tZXRob2QnLCAnZW5kX2RhdGVfdGltZScpKSkg JHNvcnQgPSAndm90ZV9pZCc7DQoNCgkkc29ydF9zcWwgICA9ICRzb3J0LicgJy4kZGlyOw0K DQoJc2V0X3ByZWYoJ2dlb192b3RlX21ldGFfc29ydF9jb2x1bW4nLCAkc29ydCwgJ2dlb192 b3RlJywgMiwgJycsIDAsIFBSRUZfUFJJVkFURSk7DQoJc2V0X3ByZWYoJ2dlb192b3RlX21l dGFfc29ydF9kaXInLCAkZGlyLCAnZ2VvX3ZvdGUnLCAyLCAnJywgMCwgUFJFRl9QUklWQVRF KTsNCg0KCSRzd2l0Y2hfZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdhc2MnIDogJ2Rlc2Mn Ow0KDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCcqJywgR0VPX1ZPVEVfTUVUQSwgJzEgPSAx IE9SREVSIEJZICcuJHNvcnRfc3FsKTsNCg0KCWlmICgkcnMpIHsNCgkJZWNobyAnPGZvcm0g YWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIG9uc3Vi bWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nLg0K DQoJCXN0YXJ0VGFibGUoJ2xpc3QnKS4NCgkJdHIoDQoJCQljb2x1bW5faGVhZCgndm90ZV9p ZCcsICd2b3RlX2lkJywgJ2dlb192b3RlJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICcnLCAnJywg KCd2b3RlX2lkJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJY29sdW1uX2hlYWQoJ3Zv dGVfdGl0bGUnLCAndm90ZV90aXRsZScsICdnZW9fdm90ZScsIHRydWUsICRzd2l0Y2hfZGly LCAnJywgJycsICgndm90ZV90aXRsZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCWNv bHVtbl9oZWFkKCdzaG93X3Jlc3VsdHMnLCAnc2hvd19yZXN1bHRzJywgJ2dlb192b3RlJywg dHJ1ZSwgJHN3aXRjaF9kaXIsICcnLCAnJywgKCdzaG93X3Jlc3VsdHMnID09ICRzb3J0KSA/ ICRkaXIgOiAnJykuDQoJCQljb2x1bW5faGVhZCgnY2hlYXRfbWV0aG9kJywgJ2NoZWF0X21l dGhvZCcsICdnZW9fdm90ZScsIHRydWUsICRzd2l0Y2hfZGlyLCAnJywgJycsICgnY2hlYXRf bWV0aG9kJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJY29sdW1uX2hlYWQoJ2VuZF9k YXRlX3RpbWUnLCAnZW5kX2RhdGVfdGltZScsICdnZW9fdm90ZScsIHRydWUsICRzd2l0Y2hf ZGlyLCAnJywgJycsICgnZW5kX2RhdGVfdGltZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4N CgkJCWhDZWxsKCkuDQoJCQloQ2VsbCgpDQoJCSk7DQoNCgkJd2hpbGUgKCRhID0gbmV4dFJv dygkcnMpKSB7DQoJCQlleHRyYWN0KGRvU3BlY2lhbCgkYSkpOw0KDQoJCQllY2hvIHRyKA0K CQkJCXRkKCR2b3RlX2lkKS4NCgkJCQl0ZCgkdm90ZV90aXRsZSkuDQoJCQkJdGQoJHNob3df cmVzdWx0cykuDQoJCQkJdGQoJGNoZWF0X21ldGhvZCkuDQoJCQkJdGQoJGVuZF9kYXRlX3Rp bWUpLg0KCQkJCXRkKGVMaW5rKCdnZW9fdm90ZScsICdnZW9fdm90ZV9tZXRhX2VkaXQnLCAn dm90ZV9pZCcsICR2b3RlX2lkLCBnVHh0KCdlZGl0JykpKS4NCgkJCQl0ZChkTGluaygnZ2Vv X3ZvdGUnLCAnZ2VvX3ZvdGVfbWV0YV9kZWwnLCAndm90ZV9pZCcsICR2b3RlX2lkLCAxKSkN CgkJCSk7DQoJCX0NCg0KCQllY2hvIGVuZFRhYmxlKCkuJzwvZm9ybT4nOw0KCX0NCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENhbiBhbGwgdGhlIG9wdGlvbl90aXRsZV8x IC0gMTAgYmUgbG9vcGVkIGhlcmU/DQpmdW5jdGlvbiBnZW9fdm90ZV9tZXRhX3NhdmUoKSB7 DQoJZXh0cmFjdChkb1NsYXNoKHBzYShhcnJheSgndm90ZV9pZCcsICd2b3RlX3RpdGxlJywg J3ZvdGVfdGl0bGVfY2xhc3MnLCAnb3B0aW9uX3RpdGxlXzEnLCAnb3B0aW9uX3RpdGxlXzIn LCAnb3B0aW9uX3RpdGxlXzMnLCAnb3B0aW9uX3RpdGxlXzQnLCAgJ29wdGlvbl90aXRsZV81 JywgJ29wdGlvbl90aXRsZV82JywgJ29wdGlvbl90aXRsZV83JywgJ29wdGlvbl90aXRsZV84 JywgJ29wdGlvbl90aXRsZV85JywgJ29wdGlvbl90aXRsZV8xMCcsICd2b3RlX2Jhcl9jb2xv dXInLCAnb3B0aW9uX3RpdGxlX2NsYXNzJywgJ2VuZF9kYXRlX3RpbWUnLCAnZW5kX2RhdGVf dGltZV9jbGFzcycsICd2b3RlX2J1dHRvbl9jbGFzcycsICdzaG93X3Jlc3VsdHMnLCAnY2hl YXRfbWV0aG9kJykpKSk7DQoJDQoJJHJzID0gc2FmZV91cGRhdGUoR0VPX1ZPVEVfTUVUQSwg Ig0KCQkJCXZvdGVfdGl0bGUgPSAnJHZvdGVfdGl0bGUnLA0KCQkJCXZvdGVfdGl0bGVfY2xh c3MgPSAnJHZvdGVfdGl0bGVfY2xhc3MnLA0KCQkJCW9wdGlvbl90aXRsZV8xID0gJyRvcHRp b25fdGl0bGVfMScsDQoJCQkJb3B0aW9uX3RpdGxlXzIgPSAnJG9wdGlvbl90aXRsZV8yJywN CgkJCQlvcHRpb25fdGl0bGVfMyA9ICckb3B0aW9uX3RpdGxlXzMnLA0KCQkJCW9wdGlvbl90 aXRsZV80ID0gJyRvcHRpb25fdGl0bGVfNCcsDQoJCQkJb3B0aW9uX3RpdGxlXzUgPSAnJG9w dGlvbl90aXRsZV81JywNCgkJCQlvcHRpb25fdGl0bGVfNiA9ICckb3B0aW9uX3RpdGxlXzYn LA0KCQkJCW9wdGlvbl90aXRsZV83ID0gJyRvcHRpb25fdGl0bGVfNycsDQoJCQkJb3B0aW9u X3RpdGxlXzggPSAnJG9wdGlvbl90aXRsZV84JywNCgkJCQlvcHRpb25fdGl0bGVfOSA9ICck b3B0aW9uX3RpdGxlXzknLA0KCQkJCW9wdGlvbl90aXRsZV8xMCA9ICckb3B0aW9uX3RpdGxl XzEwJywNCgkJCQl2b3RlX2Jhcl9jb2xvdXIgPSAnJHZvdGVfYmFyX2NvbG91cicsCQkJCQ0K CQkJCW9wdGlvbl90aXRsZV9jbGFzcyA9ICckb3B0aW9uX3RpdGxlX2NsYXNzJywNCgkJCQll bmRfZGF0ZV90aW1lID0gJyRlbmRfZGF0ZV90aW1lJywNCgkJCQllbmRfZGF0ZV90aW1lX2Ns YXNzID0gJyRlbmRfZGF0ZV90aW1lX2NsYXNzJywNCgkJCQl2b3RlX2J1dHRvbl9jbGFzcyA9 ICckdm90ZV9idXR0b25fY2xhc3MnLA0KCQkJCXNob3dfcmVzdWx0cyA9ICckc2hvd19yZXN1 bHRzJywNCgkJCQljaGVhdF9tZXRob2QgPSAnJGNoZWF0X21ldGhvZCciLA0KCQkJCSJ2b3Rl X2lkID0gJyR2b3RlX2lkJyINCgkJCSk7DQoNCglpZiAoJHJzKSB7DQoJCWdlb192b3RlX2Nv bmZpZygNCgkJCWdlb192b3RlX2dUeHQoJ21ldGFfdXBkYXRlZCcsIGFycmF5KCd7dm90ZV9p ZH0nID0+ICR2b3RlX2lkKSkNCgkJKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gZ2VvX3ZvdGVfbWV0YV9hZGQoKSB7DQoJZXh0cmFjdChkb1Ns YXNoKHBzYShhcnJheSgndm90ZV9pZCcsICd2b3RlX3RpdGxlJywgJ3ZvdGVfdGl0bGVfY2xh c3MnLCAnb3B0aW9uX3RpdGxlXzEnLCAnb3B0aW9uX3RpdGxlXzInLCAnb3B0aW9uX3RpdGxl XzMnLCAnb3B0aW9uX3RpdGxlXzQnLCAgJ29wdGlvbl90aXRsZV81JywgJ29wdGlvbl90aXRs ZV82JywgJ29wdGlvbl90aXRsZV83JywgJ29wdGlvbl90aXRsZV84JywgJ29wdGlvbl90aXRs ZV85JywgJ29wdGlvbl90aXRsZV8xMCcsICd2b3RlX2Jhcl9jb2xvdXInLCAnb3B0aW9uX3Rp dGxlX2NsYXNzJywgJ2VuZF9kYXRlX3RpbWUnLCAnZW5kX2RhdGVfdGltZV9jbGFzcycsICd2 b3RlX2J1dHRvbl9jbGFzcycsICdzaG93X3Jlc3VsdHMnLCAnY2hlYXRfbWV0aG9kJykpKSk7 DQoNCgkJCSRycyA9IHNhZmVfaW5zZXJ0KEdFT19WT1RFX01FVEEsICINCgkJCQl2b3RlX2lk ID0gJyR2b3RlX2lkJywNCgkJCQl2b3RlX3RpdGxlID0gJyR2b3RlX3RpdGxlJywNCgkJCQl2 b3RlX3RpdGxlX2NsYXNzID0gJyR2b3RlX3RpdGxlX2NsYXNzJywNCgkJCQlvcHRpb25fdGl0 bGVfMSA9ICckb3B0aW9uX3RpdGxlXzEnLA0KCQkJCW9wdGlvbl90aXRsZV8yID0gJyRvcHRp b25fdGl0bGVfMicsDQoJCQkJb3B0aW9uX3RpdGxlXzMgPSAnJG9wdGlvbl90aXRsZV8zJywN CgkJCQlvcHRpb25fdGl0bGVfNCA9ICckb3B0aW9uX3RpdGxlXzQnLA0KCQkJCW9wdGlvbl90 aXRsZV81ID0gJyRvcHRpb25fdGl0bGVfNScsDQoJCQkJb3B0aW9uX3RpdGxlXzYgPSAnJG9w dGlvbl90aXRsZV82JywNCgkJCQlvcHRpb25fdGl0bGVfNyA9ICckb3B0aW9uX3RpdGxlXzcn LA0KCQkJCW9wdGlvbl90aXRsZV84ID0gJyRvcHRpb25fdGl0bGVfOCcsDQoJCQkJb3B0aW9u X3RpdGxlXzkgPSAnJG9wdGlvbl90aXRsZV85JywNCgkJCQlvcHRpb25fdGl0bGVfMTAgPSAn JG9wdGlvbl90aXRsZV8xMCcsDQoJCQkJdm90ZV9iYXJfY29sb3VyID0gJyR2b3RlX2Jhcl9j b2xvdXInLAkJDQoJCQkJb3B0aW9uX3RpdGxlX2NsYXNzID0gJyRvcHRpb25fdGl0bGVfY2xh c3MnLA0KCQkJCWVuZF9kYXRlX3RpbWUgPSAnJGVuZF9kYXRlX3RpbWUnLA0KCQkJCWVuZF9k YXRlX3RpbWVfY2xhc3MgPSAnJGVuZF9kYXRlX3RpbWVfY2xhc3MnLA0KCQkJCXZvdGVfYnV0 dG9uX2NsYXNzID0gJyR2b3RlX2J1dHRvbl9jbGFzcycsDQoJCQkJc2hvd19yZXN1bHRzID0g JyRzaG93X3Jlc3VsdHMnLA0KCQkJCWNoZWF0X21ldGhvZCA9ICckY2hlYXRfbWV0aG9kJyIN CgkJCSk7DQoNCgkJCWlmICgkcnMpIHsNCgkJCQlnZW9fdm90ZV9jb25maWcoZ2VvX3ZvdGVf Z1R4dCgnbWV0YV9hZGRlZCcpKTsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCQkJCQ0KCQ0KCWdl b192b3RlX2NvbmZpZyhhcnJheShnZW9fdm90ZV9nVHh0KCdtZXRhX25vdF9hZGRlZCcpLCBF X0VSUk9SKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g Z2VvX3ZvdGVfbWV0YV9kZWwoKSB7DQoJZXh0cmFjdChkb1NsYXNoKHBzYShhcnJheSgndm90 ZV9pZCcpKSkpOw0KCSRyZXQgPSBAc2FmZV9kZWxldGUoR0VPX1ZPVEVfQ0hFQVQsICJ2b3Rl X2lkPSckdm90ZV9pZCciKTsNCglpZiAoJHJldCkgew0KCQkkcmV0ID0gc2FmZV9kZWxldGUo R0VPX1ZPVEVfTUVUQSwgInZvdGVfaWQ9JyR2b3RlX2lkJyIpOw0KCQkkbWVzc2FnZSA9IGdl b192b3RlX2dUeHQoJ21ldGFfZGVsZXRlZCcpOw0KCX0NCg0KCWdlb192b3RlX2NvbmZpZygk bWVzc2FnZSk7DQp9DQoNCg0KLy8gKioqKioqKioqKioqKioqKioqKioqKioqDQovLyBUQUJM RSBHRU5FUkFUSU9ODQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGdl b192b3RlX3RhYmxlX2V4aXN0KCkgew0KCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJZWNobyAi KysgVEFCTEUgIi5HRU9fVk9URV9NRVRBLiIgSEFTICIuY291bnQoQHNhZmVfc2hvdygnY29s dW1ucycsIEdFT19WT1RFX01FVEEpKS4iIENPTFVNTlM7IjsNCgl9DQoJcmV0dXJuKEBzYWZl X3Nob3coJ2NvbHVtbnMnLCBHRU9fVk9URV9NRVRBKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gZ2VvX3ZvdGVfaW5zdGFsbCgkbWVzc2FnZSkgew0K DQoJJHZlcnNpb24gPSBteXNxbF9nZXRfc2VydmVyX2luZm8oKTsNCgkkR0xPQkFMU1sndHhw X2Vycl9jb3VudCddID0gMDsNCglpZiAoJHZlcnNpb24gPCAiNC4xLjIiKSB7DQoJCSRHTE9C QUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJdHJpZ2dlcl9lcnJvcigiZ2VvX3ZvdGUgcmVx dWlyZXMgTXlTUUwgdjQuMS4yIG9yIGdyZWF0ZXIuIik7DQoJfSBlbHNlIHsNCgkJJHJldCA9 ICcnOw0KCQkkc3FsID0gYXJyYXkoKTsNCgkJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBO T1QgRVhJU1RTIGAiLlBGWC5HRU9fVk9URV9DSEVBVC4iYCAoDQoJCQkJCQlgcGtgIGludCg0 KSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCBQUklNQVJZIEtFWSwNCgkJCWB2b3RlX2lkYCBp bnQoNCkgTk9UIE5VTEwgZGVmYXVsdCAwLA0KCQkJYG9wdGlvbmAgaW50KDQpIE5PVCBOVUxM IGRlZmF1bHQgMCwNCgkJCWBjb29raWVfaXBfbG9naW5gIHZhcmNoYXIoNjQpIE5VTEwgZGVm YXVsdCAnJywNCgkJCUlOREVYICh2b3RlX2lkKQ0KCQkJCQkJKSBFTkdJTkU9TXlJU0FNIFBB Q0tfS0VZUz0xIEFVVE9fSU5DUkVNRU5UPTEiOw0KCQkJCQkJDQoJCSRzcWxbXSA9ICJDUkVB VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguR0VPX1ZPVEVfRk9STS4iYCAoDQoJCQlg aGFzaF9rZXlgIHZhcmNoYXIoMzIpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KCQkJYHRfc3Rh bXBgIFRJTUVTVEFNUCBOT1QgTlVMTCBkZWZhdWx0IENVUlJFTlRfVElNRVNUQU1QDQoJCQkJ CQkpIEVOR0lORT1NeUlTQU0gUEFDS19LRVlTPTEiOw0KDQoJCSRzcWxbXSA9ICJDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguR0VPX1ZPVEVfTUVUQS4iYCAoDQoJCQlgdm90 ZV9pZGAgaW50KDQpIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50IFBSSU1BUlkgS0VZLA0KCQkJ YHZvdGVfdGl0bGVgIHZhcmNoYXIoNjQpIE5VTEwgZGVmYXVsdCAnJywNCgkJCWBvcHRpb25f dGl0bGVfMWAgdmFyY2hhcig2NCkgTlVMTCBkZWZhdWx0ICcnLA0KCQkJYG9wdGlvbl90aXRs ZV8yYCB2YXJjaGFyKDY0KSBOVUxMIGRlZmF1bHQgJycsDQoJCQlgb3B0aW9uX3RpdGxlXzNg IHZhcmNoYXIoNjQpIE5VTEwgZGVmYXVsdCAnJywNCgkJCWBvcHRpb25fdGl0bGVfNGAgdmFy Y2hhcig2NCkgTlVMTCBkZWZhdWx0ICcnLA0KCQkJYG9wdGlvbl90aXRsZV81YCB2YXJjaGFy KDY0KSBOVUxMIGRlZmF1bHQgJycsDQoJCQlgb3B0aW9uX3RpdGxlXzZgIHZhcmNoYXIoNjQp IE5VTEwgZGVmYXVsdCAnJywNCgkJCWBvcHRpb25fdGl0bGVfN2AgdmFyY2hhcig2NCkgTlVM TCBkZWZhdWx0ICcnLA0KCQkJYG9wdGlvbl90aXRsZV84YCB2YXJjaGFyKDY0KSBOVUxMIGRl ZmF1bHQgJycsDQoJCQlgb3B0aW9uX3RpdGxlXzlgIHZhcmNoYXIoNjQpIE5VTEwgZGVmYXVs dCAnJywNCgkJCWBvcHRpb25fdGl0bGVfMTBgIHZhcmNoYXIoNjQpIE5VTEwgZGVmYXVsdCAn JywNCgkJCWBvcHRpb25fMWAgaW50KDQpIE5PVCBOVUxMIGRlZmF1bHQgMCwNCgkJCWBvcHRp b25fMmAgaW50KDQpIE5PVCBOVUxMIGRlZmF1bHQgMCwNCgkJCWBvcHRpb25fM2AgaW50KDQp IE5PVCBOVUxMIGRlZmF1bHQgMCwNCgkJCWBvcHRpb25fNGAgaW50KDQpIE5PVCBOVUxMIGRl ZmF1bHQgMCwNCgkJCWBvcHRpb25fNWAgaW50KDQpIE5PVCBOVUxMIGRlZmF1bHQgMCwNCgkJ CWBvcHRpb25fNmAgaW50KDQpIE5PVCBOVUxMIGRlZmF1bHQgMCwNCgkJCWBvcHRpb25fN2Ag aW50KDQpIE5PVCBOVUxMIGRlZmF1bHQgMCwNCgkJCWBvcHRpb25fOGAgaW50KDQpIE5PVCBO VUxMIGRlZmF1bHQgMCwNCgkJCWBvcHRpb25fOWAgaW50KDQpIE5PVCBOVUxMIGRlZmF1bHQg MCwNCgkJCWBvcHRpb25fMTBgIGludCg0KSBOT1QgTlVMTCBkZWZhdWx0IDAsDQoJCQlgdG90 YWxfdm90ZXNgIGludCg0KSBOT1QgTlVMTCBkZWZhdWx0IDAsDQoJCQlgc2hvd19yZXN1bHRz YCB2YXJjaGFyKDMpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCQlgY2hlYXRfbWV0aG9kYCB2 YXJjaGFyKDYpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCQlgZW5kX2RhdGVfdGltZWAgREFU RVRJTUUgTk9UIE5VTEwgZGVmYXVsdCAnMDAwMC0wMC0wMCAwMDowMDowMCcsDQoJCQlgdm90 ZV9iYXJfY29sb3VyYCB2YXJjaGFyKDMyKSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQkJYHZv dGVfdGl0bGVfY2xhc3NgIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCQlg b3B0aW9uX3RpdGxlX2NsYXNzYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0K CQkJYGVuZF9kYXRlX3RpbWVfY2xhc3NgIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQg JycsDQoJCQlgdm90ZV9idXR0b25fY2xhc3NgIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1 bHQgJycNCgkJCQkJCQkpIEVOR0lORT1NeUlTQU0gUEFDS19LRVlTPTEgQVVUT19JTkNSRU1F TlQ9MSI7DQoNCgkJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCQlkbXAoJHNxbCk7DQoJCX0NCgkJ Zm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsN CgkJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCdd Kys7DQoJCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAi Lm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0t PlxuIjsNCgkJCX0NCgkJfQ0KCX0NCg0KCWlmICgkR0xPQkFMU1sndHhwX2Vycl9jb3VudCdd ID09IDApIHsNCgkJJG1lc3NhZ2UgPSBnZW9fdm90ZV9nVHh0KCd0YmxfaW5zdGFsbGVkJyk7 DQoJCWdlb192b3RlX2NvbmZpZygkbWVzc2FnZSk7DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2Ug PSBnZW9fdm90ZV9nVHh0KCd0Ymxfbm90X2luc3RhbGxlZCcpOw0KCQlnZW9fdm90ZV9jb25m aWcoJG1lc3NhZ2UpOw0KCX0NCn0NCg0KDQovLyAqKioqKioqKioqKioqKioqKioqKioqKioN Ci8vIENMSUVOVC1TSURFIFRBR1MNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gZ2VvX3ZvdGVzKCRhdHRzKSB7DQoJDQoJLy8gZXh0cmFjdCAvIGRlY2xhcmUgdmFy aWFibGVzDQoJCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCQkndm90ZV9pZCcJPT4gJzEnDQoJ CSksICRhdHRzKSk7DQoJCSRvdXQgPSBhcnJheSgpOw0KCQkkZ2VvX3ZvdGVfZm9ybV9pZCA9 IDA7DQoJCSR2YXJzID0gYXJyYXkoJ2dlb192b3RlX3N0ZXAnLCdnZW9fdm90ZV9vcHRpb24n LCdnZW9fdm90ZV9mb3JtX2lkJywgJ2hhc2hfa2V5Jyk7DQoJCWV4dHJhY3QoZG9TbGFzaChw c2EoJHZhcnMpKSk7DQoJCSRnZW9fdm90ZV9mb3JtX2lkID0gKGludCkkZ2VvX3ZvdGVfZm9y bV9pZDsNCgkJJGdlb192b3RlX29wdGlvbiA9IChpbnQpJGdlb192b3RlX29wdGlvbjsNCgkJ DQoJCQkJDQogICAgLy9JZiB0aGUgdm90ZSB3YXMgY2FzdCBmb3IgYW5vdGhlciB2b3RlIG9u IHRoZSBzYW1lIHBhZ2UgLSBpZ25vcmUgaXQgYW5kIHNob3cgYmFsbG90DQoJCWlmKCRnZW9f dm90ZV9mb3JtX2lkICE9ICR2b3RlX2lkKSAkZ2VvX3ZvdGVfc3RlcCA9ICdzaG93X2JhbGxv dCc7DQoJCQkNCgkvL0lmIHN0ZXAgaXNuJ3Qgdm90ZV9jYXN0IHNldCBzdGVwIHRvIHNob3df YmFsbG90IC0gc2hvdWxkIGhlbHAgc2VjdXJpdHkNCgkJaWYoJGdlb192b3RlX3N0ZXAgIT0g J3ZvdGVfY2FzdCcpICRnZW9fdm90ZV9zdGVwID0gJ3Nob3dfYmFsbG90JzsgDQogICAgCQkN CgkvL0dldCBWb3RlIE1ldGEgZGF0YSBmcm9tIGRiIGZvciB0aGlzIHZvdGVfaWQNCgkJJHJz ID0gZ2VvX3ZvdGVfZ2V0X21ldGEoJHZvdGVfaWQpOw0KCQlleHRyYWN0KCRycyk7DQoNCgkv L0lzIHRoZSBWb3RlIHNldCBuZXZlciB0byBjbG9zZSAoWUVTIC0gbXVzdCBzaG93IHJlc3Vs dHMpICYgaWYgbm90IEhhcyB0aGUgVm90ZSBDbG9zZWQ/DQoJCWlmICgkZW5kX2RhdGVfdGlt ZSA9PSAnMDAwMC0wMC0wMCAwMDowMDowMCcpICRzaG93X3Jlc3VsdHMgPSAnWWVzJzsNCgkg ICAgZWxzZSB7DQoJCQkkZGF0ZV90aW1lX25vdyA9IGRhdGUoJ1ktbS1kIEg6aTpzJyk7DQoJ CQlpZiAoJGVuZF9kYXRlX3RpbWUgPCAkZGF0ZV90aW1lX25vdyApICRnZW9fdm90ZV9zdGVw ID0gJ3ZvdGVfY2xvc2VkJzsNCgkJfQ0KCQkJDQoJLy9JcyBGb3JtIGhhc2hfa2V5IGluIHRh YmxlIGFuZCBsZXNzIHRoYW4gdGVuIG1pbnV0ZXMgb2xkPw0KCQlpZigkZ2VvX3ZvdGVfc3Rl cCA9PSAndm90ZV9jYXN0Jykgew0KCQkJJHJoayA9IGFycmF5KCk7DQoJCQkkcmhrID0gc2Fm ZV9yb3coJyonLCBHRU9fVk9URV9GT1JNLCAiaGFzaF9rZXkgPSAnJGhhc2hfa2V5JyIpOw0K CQkJaWYoJHJoaykgew0KCQkJCWV4dHJhY3QoJHJoayk7DQoJCQkJJHRpbWVfbm93X21pbnVz X3Rlbl9taW51dGVzID0gZGF0ZSgnWS1tLWQgSDppOnMnLCB0aW1lKCktNjAwKTsNCgkJCQlp ZigkdF9zdGFtcCA8ICR0aW1lX25vd19taW51c190ZW5fbWludXRlcykgew0KCQkJCQkkZ2Vv X3ZvdGVfc3RlcCA9ICdoYXNoX2tleV90aW1lZF9vdXQnOw0KCQkJCSB9DQoJCQl9DQoJCQll bHNlIHsNCgkJCQkkZ2VvX3ZvdGVfc3RlcCA9ICdub19oYXNoX2tleSc7DQoJCQl9DQoJCS8v IG1pZ2h0IGFzIHdlbGwgY2xlYW4gdXAgdGhlIGhhc2hfa2V5IHRhYmxlIGhlcmUNCgkJJHJl dCA9IEBzYWZlX2RlbGV0ZShHRU9fVk9URV9GT1JNLCAidF9zdGFtcCA8ICckdGltZV9ub3df bWludXNfdGVuX21pbnV0ZXMnIik7DQoJCS8vIG5vdCBzdXJlIGlmIHRoaXMgaXMgc29tZXRo aW5nIHRoYXQgc2hvdWxkIGdvIGluIGEgcGx1Z2luPyBCdXQgdGhlcmUgaXMgbG90cyBvZiBk ZWxldGluZyBmcm9tIHRoaXMgdGFibGUgJiBpdCB3b3Jrcz8NCgkJJHJlcGFpciA9IHNhZmVf cmVwYWlyKEdFT19WT1RFX0ZPUk0pOw0KCQl9DQoJCQ0KCQkNCiAgIC8vIE1haW4gcm91dGlu ZQ0KCQlzd2l0Y2ggKCRnZW9fdm90ZV9zdGVwKSB7DQoJCQljYXNlICJ2b3RlX2Nhc3QiOg0K CQkJCWlmICgkZ2VvX3ZvdGVfb3B0aW9uIDwgMSkgew0KCQkJCQkvL05vIHJhZGlvIGJ1dHRv biBzZWxlY3RlZCB3aGVuIHN1Ym1pdCBwcmVzc2VkDQoJCQkJCSRvdXQgPSBnZW9fdm90ZV9z aG93X2JhbGxvdCgkcnMsIGdlb192b3RlX2dUeHQoJ25vX29wdGlvbl9zZWxlY3RlZCcpKTsN CgkJCQl9DQoJCQkJZWxzZSB7IA0KCQkJCQkvLyBjaGVjayBpZiB2b3RlZCBiZWZvcmUNCgkJ CQkJaWYgKGdlb192b3RlX3ZhbGlkKCRjaGVhdF9tZXRob2QsICR2b3RlX2lkKSl7DQoJCQkJ CQkvL0lzIHRoZSB2b3RlIHNldCB0byBzaG93IHJlc3VsdHMgYmVmb3JlIHZvdGluZyBjbG9z ZXM/DQoJCQkJCQlpZiAoJHNob3dfcmVzdWx0cyA9PSAiWWVzIikgew0KCQkJCQkJCWlmIChn ZW9fdm90ZV92b3RlX2Nhc3QoJHJzLCAkZ2VvX3ZvdGVfb3B0aW9uKSkgew0KCQkJCQkJCQkv L1dhcyB0aGUgdm90ZSB3cml0dGVuIHRvIGRhdGFiYXNlPyBZZXMgLSBnZXQgdGhlIHVwZGF0 ZWQgdG90YWxzDQoJCQkJCQkJCSRycyA9IGdlb192b3RlX2dldF9tZXRhKCR2b3RlX2lkKTsN CgkJCQkJCQkJZXh0cmFjdCgkcnMpOw0KCQkJCQkJCQkkb3V0ID0gZ2VvX3ZvdGVfc2hvd19y ZXN1bHRzKCRycywgZ2VvX3ZvdGVfZ1R4dCgndm90ZV9jYXN0JykpOw0KCQkJCQkJCX0NCgkJ CQkJCQllbHNlIHsNCgkJCQkJCQkJJG91dCA9IGdlb192b3RlX3Nob3dfYmFsbG90KCRycywg Z2VvX3ZvdGVfZ1R4dCgndm90ZV9ub3RfY2FzdCcpKTsNCgkJCQkJCQl9DQoJCQkJCQl9IA0K CQkJCQkJZWxzZSB7DQoJCQkJCQkJaWYgKGdlb192b3RlX3ZvdGVfY2FzdCgkcnMsICRnZW9f dm90ZV9vcHRpb24pKSB7DQoJCQkJCQkJCS8vV2FzIHRoZSB2b3RlIHdyaXR0ZW4gdG8gZGF0 YWJhc2U/IFllcw0KCQkJCQkJCQkkb3V0ID0gZ2VvX3ZvdGVfc2hvd19vcHRpb25zKCRycywg Z2VvX3ZvdGVfZ1R4dCgndm90ZV9jYXN0X25vX3Jlc3VsdHMnKSk7DQoJCQkJCQkJfQ0KCQkJ CQkJCWVsc2Ugew0KCQkJCQkJCQkkb3V0ID0gZ2VvX3ZvdGVfc2hvd19iYWxsb3QoJHJzLCBn ZW9fdm90ZV9nVHh0KCd2b3RlX25vdF9jYXN0JykpOw0KCQkJCQkJCX0NCgkJCQkJCX0gDQoJ CQkJCX0NCgkJCQkJZWxzZSB7DQoJCQkJCQlpZiAoJHNob3dfcmVzdWx0cyA9PSAiWWVzIikg JG91dCA9IGdlb192b3RlX3Nob3dfcmVzdWx0cygkcnMsIGdlb192b3RlX2dUeHQoJ3ZvdGVk X2JlZm9yZScpKTsNCgkJCQkJCWVsc2UgJG91dCA9IGdlb192b3RlX3Nob3dfb3B0aW9ucygk cnMsIGdlb192b3RlX2dUeHQoJ2FscmVhZHlfdm90ZWRfcmVzdWx0cycpKTsNCgkJCQkJfQ0K CQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJCQ0KCQkJY2FzZSAic2hvd19iYWxsb3QiOg0KCQkJ CWlmIChnZW9fdm90ZV92YWxpZCgkY2hlYXRfbWV0aG9kLCAkdm90ZV9pZCkpJG91dCA9IGdl b192b3RlX3Nob3dfYmFsbG90KCRycywgIiIpOw0KCQkJCWVsc2Ugew0KCQkJCQlpZiAoJHNo b3dfcmVzdWx0cyA9PSAiWWVzIikgJG91dCA9IGdlb192b3RlX3Nob3dfcmVzdWx0cygkcnMs IGdlb192b3RlX2dUeHQoJ2FscmVhZHlfdm90ZWQnKSk7DQoJCQkJCWVsc2UgJG91dCA9IGdl b192b3RlX3Nob3dfb3B0aW9ucygkcnMsIGdlb192b3RlX2dUeHQoJ2FscmVhZHlfdm90ZWRf cmVzdWx0cycpKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQkJDQoJCQljYXNlICJ2b3RlX2Ns b3NlZCI6DQoJCQkJJG91dCA9IGdlb192b3RlX3Nob3dfcmVzdWx0cygkcnMsIGdlb192b3Rl X2dUeHQoJ3ZvdGVfY2xvc2VkJykpOw0KCQkJCWJyZWFrOw0KCQkJCQ0KCQkJY2FzZSAiaGFz aF9rZXlfdGltZWRfb3V0IjoNCgkJCQkkb3V0ID0gZ2VvX3ZvdGVfc2hvd19iYWxsb3QoJHJz LCBnZW9fdm90ZV9nVHh0KCdmb3JtX2V4cGlyZWQnKSk7DQoJCQkJYnJlYWs7DQoJCQkJDQoJ CQljYXNlICJub19oYXNoX2tleSI6DQoJCQkJc2xlZXAoMyk7DQoJCQkJJG91dCA9IGdlb192 b3RlX3Nob3dfb3B0aW9ucygkcnMsIGdlb192b3RlX2dUeHQoJ3NlY3VyaXR5X3Rva2VuJykp Ow0KCQkJCWJyZWFrOw0KCQkJCQ0KCQkJZGVmYXVsdDogLy8gc2hvdWxkbid0IGdldCBoZXJl DQoJCQkJJG91dCA9IGdlb192b3RlX3Nob3dfb3B0aW9ucygkcnMsICIiKTsNCgkJCQlicmVh azsNCgkJfQ0KCQkkb3V0ID0gam9pbignJywgJG91dCk7DQoJCXJldHVybiAkb3V0Ow0KfQ0K Ly8gZW5kIGZ1bmN0aW9uIGdlb192b3RlCQ0KCQkJDQpmdW5jdGlvbiBnZW9fdm90ZV9nZXRf bWV0YSgkdm90ZV9pZCl7DQoJLy9HZXQgVm90ZSBNZXRhIERhdGENCgkJJHJzID0gYXJyYXko KTsNCgkJJHJzID0gZG9TbGFzaChzYWZlX3JvdygnKicsIEdFT19WT1RFX01FVEEsICJ2b3Rl X2lkID0gJHZvdGVfaWQiKSk7DQoJCXJldHVybiAkcnM7DQp9DQovLyBlbmQgZnVuY3Rpb24g Z2VvX3ZvdGVfbWV0YQkNCiANCmZ1bmN0aW9uIGdlb192b3RlX3ZvdGVfY2FzdCgkcnMsICRn ZW9fdm90ZV9vcHRpb24pIHsNCg0KCQlleHRyYWN0KCRycyk7DQoJCQlzd2l0Y2ggKCRjaGVh dF9tZXRob2QpIHsNCgkJCQljYXNlICJjb29raWUiOg0KCQkJCQkkY29va2llX2lwX2xvZ2lu ID0gY3MoJ2dlb192b3RlJyk7DQoJCQkJCWlmIChlbXB0eSgkY29va2llX2lwX2xvZ2luKSkg JGNvb2tpZV9pcF9sb2dpbiA9IG1kNSh1bmlxaWQobXRfcmFuZCgpLCBUUlVFKSk7DQoJCQkJ CSRzdmMgPSBnZW9fdm90ZV9zZXRfdm90ZV9jb29raWUgKCRjb29raWVfaXBfbG9naW4sICRl bmRfZGF0ZV90aW1lKTsNCgkJCQkJJGNvb2tpZV9pcF9sb2dpbiA9IGNzKCdnZW9fdm90ZScp Ow0KCQkJCQlpZiAoZW1wdHkoJGNvb2tpZV9pcF9sb2dpbikpICRjb29raWVfaXBfbG9naW4g PSByZW1vdGVfYWRkcigpOwkNCgkJCQkJYnJlYWs7DQoJCQkJCQ0KCQkJCWNhc2UgImlwIjoN CgkJCQkJJGNvb2tpZV9pcF9sb2dpbiA9IHJlbW90ZV9hZGRyKCk7DQoJCQkJCWJyZWFrOw0K CQkJCQkNCiAgIAkJCQljYXNlICJsb2dpbiI6DQoJCQkJCSRjb29raWVfaXBfbG9naW4gPSBz dWJzdHIoY3MoJ3R4cF9sb2dpbl9wdWJsaWMnKSwgMTApOw0KCQkJCQlicmVhazsNCgkJCQkN CgkJCQlkZWZhdWx0Og0KCQkJCS8vU2hvdWxkIG5ldmVyIGdldCBoZXJlIC4uLiBidXQgaWYg aXQgZG9lcyB1c2UgY29va2llIHRoZW4gaXANCgkJCQkJJGNvb2tpZV9pcF9sb2dpbiA9IGNz KCdnZW9fdm90ZScpOw0KCQkJCQlpZiAoIWlzc2V0KCRjb29raWVfaXBfbG9naW4pKSAkY29v a2llX2lwX2xvZ2luID0gbWQ1KHVuaXFpZChtdF9yYW5kKCksIFRSVUUpKTsNCgkJCQkJJHN2 YyA9IGdlb192b3RlX3NldF92b3RlX2Nvb2tpZSAoJGNvb2tpZV9pcF9sb2dpbiwgJGVuZF9k YXRlX3RpbWUpOw0KCQkJCQlpZiAoIWlzc2V0KCRjb29raWVfaXBfbG9naW4pKSAkY29va2ll X2lwX2xvZ2luID0gcmVtb3RlX2FkZHIoKTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCSRzaSA9 IHNhZmVfaW5zZXJ0KCBHRU9fVk9URV9DSEVBVCwgImBwa2AgPSBOVUxMLCBgdm90ZV9pZGAg PSAnJHZvdGVfaWQnLCBgb3B0aW9uYCA9ICckZ2VvX3ZvdGVfb3B0aW9uJywgYGNvb2tpZV9p cF9sb2dpbmAgPSAnJGNvb2tpZV9pcF9sb2dpbiciICk7DQoJCSR7Im9wdGlvbl8iLiRnZW9f dm90ZV9vcHRpb259Kys7DQoJCSR0b3RhbF92b3RlcysrOw0KCQkkc3UgPSBzYWZlX3VwZGF0 ZSggR0VPX1ZPVEVfTUVUQSwgIm9wdGlvbl8xID0gJyRvcHRpb25fMScsIG9wdGlvbl8yID0g JyRvcHRpb25fMicsIG9wdGlvbl8zID0gJyRvcHRpb25fMycsIG9wdGlvbl80ID0gJyRvcHRp b25fNCcsIG9wdGlvbl81ID0gJyRvcHRpb25fNScsIG9wdGlvbl82ID0gJyRvcHRpb25fNics IG9wdGlvbl83ID0gJyRvcHRpb25fNycsIG9wdGlvbl84ID0gJyRvcHRpb25fOCcsIG9wdGlv bl85ID0gJyRvcHRpb25fOScsIG9wdGlvbl8xMCA9ICckb3B0aW9uXzEwJywgdG90YWxfdm90 ZXMgPSAnJHRvdGFsX3ZvdGVzJyIsICJ2b3RlX2lkID0gJyR2b3RlX2lkJyIpOw0KCQlpZiAo aXNzZXQoJHNpKSAmJiBpc3NldCgkc3UpKSByZXR1cm4gMTsNCgkJZWxzZSByZXR1cm4gMDsN Cn0NCi8vIGVuZCBmdW5jdGlvbiBnZW9fdm90ZV9jYXN0CQ0KDQoNCg0KZnVuY3Rpb24gZ2Vv X3ZvdGVfc2hvd19iYWxsb3QoJHJzLCAkbWVzc2FnZSl7DQoJDQoJCQlleHRyYWN0KCRycyk7 DQoJCQkkb3V0ID0gYXJyYXkoKTsNCgkJCSRoYXNoX2tleSA9IG1kNSh1bmlxaWQobXRfcmFu ZCgpLCBUUlVFKSk7DQoJCQkkc2kgPSBzYWZlX2luc2VydChHRU9fVk9URV9GT1JNLCAiYGhh c2hfa2V5YCA9ICckaGFzaF9rZXknLCBgdF9zdGFtcGAgPSBOVUxMIik7DQoJCQkkb3V0W10g PSAnPGRpdiBjbGFzcz0gIiR2b3RlX3RpdGxlX2NsYXNzIj48aDI+Jy5kb1NwZWNpYWwoJHZv dGVfdGl0bGUpLic8L2gyPjwvZGl2Pic7DQoJCQkkb3V0W10gPSAnPGZvcm0gbmFtZT0iZ2Vv X3ZvdGVfZm9ybV8nLiR2b3RlX2lkLiciIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGVuY3R5 cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPic7DQoJCQkkb3V0W10gPSAnPGlucHV0IHR5cGU9 ImhpZGRlbiIgbmFtZT0iZ2VvX3ZvdGVfc3RlcCIgdmFsdWU9InZvdGVfY2FzdCIgLz4nOw0K CQkJJG91dFtdID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imhhc2hfa2V5IiB2YWx1 ZT0iJy4kaGFzaF9rZXkuJyIgLz4nOw0KCQkJJG91dFtdID0gJzxpbnB1dCB0eXBlPSJoaWRk ZW4iIG5hbWU9Imdlb192b3RlX2Zvcm1faWQiIHZhbHVlPSInLiR2b3RlX2lkLiciIC8+JzsN CgkJCSRvdXRbXSA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJnZW9fdm90ZV9vcHRp b24iIHZhbHVlPSIwIiAvPic7DQoJCQkNCgkJCWZvciAoJGkgPSAxOyAkaSA8PSAxMDsgJGkr Kyl7DQoJCQkJaWYgKCR7Im9wdGlvbl90aXRsZV8iLiRpfSAhPSAiIikJew0KCQkgCQkJJG91 dFtdPSAnPHNwYW4gY2xhc3M9IicuJG9wdGlvbl90aXRsZV9jbGFzcy4nIj48aW5wdXQgdHlw ZT0icmFkaW8iIG5hbWU9Imdlb192b3RlX29wdGlvbiIgdmFsdWU9IicuJGkuJyIgLz4nLmRv U3BlY2lhbCgkeyJvcHRpb25fdGl0bGVfIi4kaX0pLic8L3NwYW4+PGJyIC8+JzsNCgkJCQl9 DQoJCQl9DQoJCQkNCgkJCSRvdXRbXSA9ICc8c3BhbiBjbGFzcz0gIicuJHZvdGVfYnV0dG9u X2NsYXNzLiciPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9Imdlb192b3RlX3N1Ym1pdF8n LiR2b3RlX2lkLiciIHZhbHVlPSInLmdlb192b3RlX2dUeHQoJ3N1Ym1pdF9idXR0b24nKS4n IiAvPjwvc3Bhbj48L2Zvcm0+PGJyIC8+PGJyIC8+JzsNCgkJCSRvdXRbXSA9ICRtZXNzYWdl Ow0KCQkJDQoJCQlyZXR1cm4gJG91dDsNCn0NCi8vIGVuZCBmdW5jdGlvbiBnZW9fdm90ZV9z aG93X2JhbGxvdA0KDQpmdW5jdGlvbiBnZW9fdm90ZV9zaG93X29wdGlvbnMoJHJzLCAkbWVz c2FnZSl7DQoJDQoJCQlleHRyYWN0KCRycyk7DQoJCQkkb3V0ID0gYXJyYXkoKTsNCgkJCSRv dXRbXSA9ICc8ZGl2IGNsYXNzPSAiJHZvdGVfdGl0bGVfY2xhc3MiPjxoMj4nLmRvU3BlY2lh bCgkdm90ZV90aXRsZSkuJzwvaDI+PC9kaXY+JzsNCgkJCWZvciAoJGkgPSAxOyAkaSA8PSAx MDsgJGkrKyl7DQoJCQkJaWYgKCR7Im9wdGlvbl90aXRsZV8iLiRpfSAhPSAiIikJew0KCQkg CQkJJG91dFtdPSAnPHNwYW4gY2xhc3M9IicuJG9wdGlvbl90aXRsZV9jbGFzcy4nIj4nLmRv U3BlY2lhbCgkeyJvcHRpb25fdGl0bGVfIi4kaX0pLic8L3NwYW4+PGJyIC8+JzsNCgkJCQl9 DQoJCQl9DQoJCQlpZiAoJGVuZF9kYXRlX3RpbWUgIT0gIjAwLTAwLTAwIDAwOjAwOjAwIiAp IHsNCgkgICAgCQkkZGF0ZV90aW1lX25vdyA9IGRhdGUoIlktbS1kIEg6aTpzIik7DQoJCQkJ aWYgKCRlbmRfZGF0ZV90aW1lID4gJGRhdGVfdGltZV9ub3cpIHsNCgkJCQkJJHBocGRhdGUg PSBzdHJ0b3RpbWUoICRlbmRfZGF0ZV90aW1lICk7DQoJCQkJCSRvdXRbXSA9ICc8YnIgLz4n Lmdlb192b3RlX2dUeHQoJ3ZvdGluZ19jbG9zZXNfb24nKS4nICcuZGF0ZSgnRCBqUyBGIFkn LCAkcGhwZGF0ZSkuJyAnLmdlb192b3RlX2dUeHQoJ2F0JykuJyAnLmRhdGUoJ0c6aTpzJywg JHBocGRhdGUpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJJG91dFtdID0gJzxiciAvPicuJG1lc3Nh Z2U7DQoJCQkNCgkJCXJldHVybiAkb3V0Ow0KfQ0KLy8gZW5kIGZ1bmN0aW9uIGdlb192b3Rl X3Nob3dfb3B0aW9ucwkJDQoJCQkNCmZ1bmN0aW9uIGdlb192b3RlX3Nob3dfcmVzdWx0cygk cnMsICRtZXNzYWdlKXsNCgkJCQ0KCQkJZXh0cmFjdCgkcnMpOw0KCQkJJG91dCA9IGFycmF5 KCk7DQoJCQkkdG90YWxfdm90ZXNfcGVyY2VudCA9IGFycmF5X2ZpbGwoMSwgMTAsIDApOw0K CQkJDQoJCQkJaWYgKCR0b3RhbF92b3RlcyA+IDApew0KCQkJCQlmb3IgKCRpID0gMTsgJGkg PD0gMTA7ICRpKyspIHsNCgkJCQkJCSR0b3RhbF92b3Rlc19wZXJjZW50WyRpXSA9IHJvdW5k KCgkeydvcHRpb25fJy4kaX0vJHRvdGFsX3ZvdGVzKSoxMDAsIDIpOw0KCQkJCQkJfQ0KCQkJ CX0NCgkJCQ0KCQkJLy9hcnNvcnQoKSB3b3J0aCB0cnlpbmcgYXQgc29tZSBwb2ludCB0byBv cmRlciB0aGUgcmVzdWx0cw0KCQkNCgkJCSRvdXRbXSA9ICAnPHNwYW4gY2xhc3M9ICInLiR2 b3RlX3RpdGxlX2NsYXNzLiciPjxoMj4nLmRvU3BlY2lhbCgkdm90ZV90aXRsZSkuJzwvaDI+ PC9zcGFuPjxiciAvPic7DQoJCQkNCgkJCWZvciAoJGkgPSAxOyAkaSA8PSAxMDsgJGkrKyl7 DQoJCQkJaWYgKCR7J29wdGlvbl90aXRsZV8nLiRpfSAhPSAnJykJew0KCQkgCQkJJG91dFtd ID0gICc8c3BhbiBjbGFzcz0iJy4kb3B0aW9uX3RpdGxlX2NsYXNzLiciPicuZG9TcGVjaWFs KCR7Im9wdGlvbl90aXRsZV8iLiRpfSkuJyAoJy4kdG90YWxfdm90ZXNfcGVyY2VudFskaV0u JyUsICcuJHsib3B0aW9uXyIuJGl9LicgJy5nZW9fdm90ZV9nVHh0KCd2b3RlcycpLicpPC9z cGFuPjxiciAvPic7DQoJCSAJCQkvL2hhcmQgY29kZWQgY3NzIGZvciBhbHBoYSByZWxlYXNl IA0KCQkgCQkJJG91dFtdID0gICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOicuJHZvdGVfYmFy X2NvbG91ci4nO3dpZHRoOicuJHRvdGFsX3ZvdGVzX3BlcmNlbnRbJGldLiclO2hlaWdodDox NnB4OyI+PC9kaXY+JzsNCgkJCQl9DQoJCQl9DQoJCQkkb3V0W10gPSAnPHNwYW4gY2xhc3M9 IiRvcHRpb25fdGl0bGVfY2xhc3MiPicuZ2VvX3ZvdGVfZ1R4dCgndG90YWxfdm90ZXMnKS4n ICcuJHRvdGFsX3ZvdGVzLicgPC9zcGFuPjxiciAvPjxiciAvPic7DQoJCQlpZiAoJGVuZF9k YXRlX3RpbWUgIT0gIjAwLTAwLTAwIDAwOjAwOjAwIiApIHsNCgkgICAgCQkkZGF0ZV90aW1l X25vdyA9IGRhdGUoIlktbS1kIEg6aTpzIik7DQoJCQkJaWYgKCRlbmRfZGF0ZV90aW1lID4g JGRhdGVfdGltZV9ub3cpIHsNCgkJCQkJJHBocGRhdGUgPSBzdHJ0b3RpbWUoICRlbmRfZGF0 ZV90aW1lICk7DQoJCQkJCSRvdXRbXSA9IGdlb192b3RlX2dUeHQoJ3ZvdGluZ19jbG9zZXNf b24nKS4nICcuZGF0ZSgnRCBqUyBGIFknLCAkcGhwZGF0ZSkuJyAnLmdlb192b3RlX2dUeHQo J2F0JykuJyAnLmRhdGUoJ0c6aTpzJywgJHBocGRhdGUpLic8YnIgLz48YnIgLz4nOw0KCQkJ CQl9DQoJCQkJfQ0KCQkJJG91dFtdID0gJG1lc3NhZ2U7DQoJCQlyZXR1cm4gJG91dDsNCn0N Ci8vIGVuZCBmdW5jdGlvbiBnZW9fdm90ZV9zaG93X3Jlc3VsdHMJDQoNCmZ1bmN0aW9uIGdl b192b3RlX3ZhbGlkKCRjaGVhdF9tZXRob2QsICR2b3RlX2lkKSB7DQoNCglzd2l0Y2ggKCRj aGVhdF9tZXRob2QpIHsNCgkJY2FzZSAiY29va2llIjoNCgkJCSRjb29raWVfaXBfbG9naW4g PSBjcygnZ2VvX3ZvdGUnKTsNCgkJCWlmKGVtcHR5KCRjb29raWVfaXBfbG9naW4pKSB7IC8v IGZhbGxiYWNrIGFuZCBjaGVjayBpcCBtZXRob2QNCgkJCQkkY29va2llX2lwX2xvZ2luID0g cmVtb3RlX2FkZHIoKTsNCgkJCQkkdm90ZWRfYmVmb3JlID0gc2FmZV9jb3VudChHRU9fVk9U RV9DSEVBVCwgInZvdGVfaWQ9JyR2b3RlX2lkJyBBTkQgY29va2llX2lwX2xvZ2luPSckY29v a2llX2lwX2xvZ2luJyIpOw0KCQkJCWlmICgkdm90ZWRfYmVmb3JlKSByZXR1cm4gMDsNCgkJ CQllbHNlIHJldHVybiAxOw0KCQkJCX0NCgkJCQkNCgkJCWVsc2Ugew0KCQkJCSR2b3RlZF9i ZWZvcmUgPSBzYWZlX2NvdW50KEdFT19WT1RFX0NIRUFULCAidm90ZV9pZD0nJHZvdGVfaWQn IEFORCBjb29raWVfaXBfbG9naW49JyRjb29raWVfaXBfbG9naW4nIik7DQoJCQkJaWYgKCR2 b3RlZF9iZWZvcmUpIHJldHVybiAwOw0KCQkJCWVsc2UgeyAvLyBmYWxsYmFjayBhbmQgY2hl Y2sgaXAgbWV0aG9kDQoJCQkJCSRjb29raWVfaXBfbG9naW4gPSByZW1vdGVfYWRkcigpOw0K CQkJCQkkdm90ZWRfYmVmb3JlID0gMDsNCgkJCQkJJHZvdGVkX2JlZm9yZSA9IHNhZmVfY291 bnQoR0VPX1ZPVEVfQ0hFQVQsICJ2b3RlX2lkPSckdm90ZV9pZCcgQU5EIGNvb2tpZV9pcF9s b2dpbj0nJGNvb2tpZV9pcF9sb2dpbiciKTsNCgkJCQkJaWYgKCR2b3RlZF9iZWZvcmUpIHJl dHVybiAwOw0KCQkJCQllbHNlIHJldHVybiAxOw0KCQkJCQl9DQoJCQkJfQ0KCQkJYnJlYWs7 DQoJCQkNCgkJY2FzZSAiaXAiOgkJDQoJCQkkY29va2llX2lwX2xvZ2luID0gcmVtb3RlX2Fk ZHIoKTsNCgkJCSR2b3RlZF9iZWZvcmUgPSBzYWZlX2NvdW50KEdFT19WT1RFX0NIRUFULCAi dm90ZV9pZD0nJHZvdGVfaWQnIEFORCBjb29raWVfaXBfbG9naW49JyRjb29raWVfaXBfbG9n aW4nIik7DQoJCQlpZiAoJHZvdGVkX2JlZm9yZSkgcmV0dXJuIDA7DQoJCQllbHNlIHJldHVy biAxOw0KCQkJYnJlYWs7DQoJCQkNCgkJY2FzZSAibG9naW4iOgkJDQoJCQkkbmFtZSA9IHN1 YnN0cihjcygndHhwX2xvZ2luX3B1YmxpYycpLCAxMCk7DQoJCQlpZiAoJG5hbWUpIAkkdm90 ZWRfYmVmb3JlID0gc2FmZV9jb3VudChHRU9fVk9URV9DSEVBVCwgInZvdGVfaWQ9JyR2b3Rl X2lkJyBBTkQgY29va2llX2lwX2xvZ2luPSckbmFtZSciKTsNCgkJCWlmICgkdm90ZWRfYmVm b3JlKSByZXR1cm4gMDsNCgkJCWVsc2UgcmV0dXJuIDE7DQoJCQlicmVhazsNCg0KCQlkZWZh dWx0OiAvL3Nob3VsZCBuZXZlciBnZXQgaGVyZSAuLi4gYnV0IGlmIHlvdSBkbyB5b3VyIHZv dGUgaXNuJ3QgdmFkaWQJDQoJCQlyZXR1cm4gMDsNCgkJCWJyZWFrOw0KCQl9DQp9DQovLyBl bmQgZnVuY3Rpb24gZ2VvX3ZvdGVfdmFsaWQNCg0KDQpmdW5jdGlvbiBnZW9fdm90ZV9zZXRf dm90ZV9jb29raWUgKCRjb29raWVfaXBfbG9naW4sICRlbmRfZGF0ZV90aW1lKSB7DQoJLy9z ZXRzIGV4cGlyYXRpb24gdGltZSBhdCBhIHllYXIgLSBjaGFuZ2UgdG8gJGVuZC1kYXRlLXRp bWUgYXQgc29tZSBmdXR1cmUgcG9pbnQuDQoJCQkkZXhwX3RpbWUgPSB0aW1lKCkrNjAqNjAq MjQqMzY1Ow0KCQkJJHB1Yl9wYXRoID0gcHJlZ19yZXBsYWNlKCd8Ly8kfCcsJy8nLCByaHUu Jy8nKSA7DQoJCQlzZXRjb29raWUoJ2dlb192b3RlJywgJGNvb2tpZV9pcF9sb2dpbiwgJGV4 cF90aW1lLCAkcHViX3BhdGgpOw0KfQ0KLy8gZW5kIGZ1bmN0aW9uIGdlb192b3RlX3NldF92 b3RlX2Nvb2tpZQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyANCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBnZW9fdm90ZV9nVHh0KCR3 aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQknYWRtaW5fdGFi JyA9PiAnVm90ZScsDQoJCSdnZW9fdm90ZScgPT4gJ1ZvdGUnLA0KCQknZ2VvX3ZvdGVfbWV0 YV9hZGQnID0+ICdBZGQgTmV3IFZvdGUnLA0KCQknbWV0YV9hZGRlZCcgPT4gJ05ldyBWb3Rl IFN1Y2Nlc3NmdWxseSBBZGRlZCcsDQoJCSdtZXRhX25vdF9hZGRlZCcgPT4gJ1Byb2JsZW0g YWRkaW5nIHZldyB2b3RlOiBjaGVjayB2b3RlX2lkIGlzIG5vdCBhbHJlYWR5IHVzZWQnLA0K CQknbWV0YV9kZWxldGVkJyA9PiAnVm90ZSBEYXRhIFN1Y2Nlc3NmdWxseSBEZWxldGVkJywN CgkJJ21ldGFfbm90X2RlbGV0ZWQnID0+ICdQcm9ibGVtIGRlbGV0aW5nIFZvdGU6IGl0IG1h eSBzdGlsbCBleGlzdCcsDQoJCSdnZW9fdm90ZV9tZXRhX2VkaXQnID0+ICdFZGl0IFZvdGUn LA0KCQknbWV0YV91cGRhdGVkJyA9PiAnVm90ZSBUYWJsZXMgU3VjY2Vzc2Z1bGx5IFVwZGF0 ZWQnLA0KCQkndGJsX2luc3RhbGxlZCcgPT4gJ1RhYmxlcyBpbnN0YWxsZWQuJywNCgkJJ3Ri bF9ub3RfaW5zdGFsbGVkJyA9PiAnVGFibGVzIE5PVCBpbnN0YWxsZWQuJywNCgkJJ25vX29w dGlvbl9zZWxlY3RlZCcgPT4gJ1RyeSBhZ2FpbiBwbGVhc2UhIFlvdSBmb3Jnb3QgdG8gbWFr ZSBhIHNlbGVjdGlvbi4nLA0KCQkndm90ZV9jYXN0JyA9PiAnVGhhbmsgeW91LCB5b3VyIHZv dGUgaGFzIGJlZW4gY2FzdCcsDQoJCSd2b3RlX2Nhc3Rfbm9fcmVzdWx0cycgPT4gJ1RoYW5r IHlvdSwgeW91ciB2b3RlIGhhcyBiZWVuIGNhc3QuIFJlc3VsdHMgY2FuIGJlIHZpZXdlZCBh ZnRlciB2b3RpbmcgY2xvc2VzJywNCgkJJ3ZvdGVfbm90X2Nhc3QnID0+ICdTb3JyeSwgeW91 ciB2b3RlIHdhcyBub3QgcmVjb3JkZWQsIHBsZWFzZSB2b3RlIGFnYWluLicsDQoJCSd2b3Rl ZF9iZWZvcmUnID0+ICdTb3JyeSwgYnV0IHlvdSBoYXZlIGFscmVhZHkgdm90ZWQuJywNCgkJ J2FscmVhZHlfdm90ZWQnID0+ICdZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkLicsDQoJCSdhbHJl YWR5X3ZvdGVkX3Jlc3VsdHMnID0+ICdZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkLiBSZXN1bHRz IGNhbiBiZSB2aWV3ZWQgYWZ0ZXIgdm90aW5nIGNsb3Nlcy4nLA0KCQknc3VibWl0X2J1dHRv bicgPT4gJ1ZvdGUgTm93JywNCgkJJ3ZvdGVfY2xvc2VkJyA9PiAnVm90aW5nIGhhcyBjbG9z ZWQnLA0KCQkndm90ZXMnID0+ICd2b3RlcywnLA0KCQkndG90YWxfdm90ZXMnID0+ICdUb3Rh bCBWb3RlcycsDQoJCSd2b3RpbmdfY2xvc2VzX29uJyA9PiAnVm90aW5nIGNsb3NlcyBvbics DQoJCSdhdCcgPT4gJ2F0JywNCgkJJ2Zvcm1fZXhwaXJlZCcgPT4gJ1RyeSBhZ2FpbiwgdGhl IHZvdGluZyBmb3JtIGhhcyBhIHNlY3VyaXR5IHRpbWUgbGltaXQnLA0KCQknc2VjdXJpdHlf dG9rZW4nID0+ICdWb3RlIG5vdCBjYXN0LCBhIHNlY3VyaXR5IHRva2VuIHdhcyBtaXNzaW5n IGZyb20geW91ciBiYWxsb3QnCQkNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0s ICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6 NToiZmxhZ3MiO3M6MToiMCI7czo0OiJoZWxwIjtzOjUyNzA6IjxkaXYgaWQ9Imdlb19oZWxw Ij4KCiAgICA8aDE+Z2VvX3ZvdGVzPC9oMT4KCiAgICA8cD5Qb2xsIC0gQmFsbG90IC0gVm90 aW5nIHBsdWdpbjwvcD4KCiAgICA8aDI+RmVhdHVyZXM8L2gyPgoKICAgIDx1bD4KICAgICAg ICA8bGk+Q3JlYXRlIHZvdGVzL3BvbGxzL2JhbGxvdHMgZm9yIHlvdXIgd2Vic2l0ZS48L2xp PgogICAgICAgIDxsaT5Wb3RlIEluZm8gaXMgYWRkZWQvZWRpdGVkIG9uIHRoZSBBZG1pbi0m Z3Q7Vm90ZSB0YWIuPC9saT4KICAgICAgICA8bGk+UHJlc2VudGx5IHVwIHRvIDEwIHZvdGUg b3B0aW9ucyBjYW4gYmUgc2V0LjwvbGk+CiAgICAgICAgPGxpPkJhbGxvdCBmcmF1ZCBjaGVj ayBtZXRob2RzIGluY2x1ZGUgYSBjaG9pY2Ugb2YgY29va2llLCBpcCwgbG9naW4uIENvb2tp ZSAoZGVmYXVsdCkgcmV2ZXJ0cyB0byBJUCBpZiBjb29raWUgY2FuJ3QgYmUgc2V0LjwvbGk+ CiAgICAgICAgPGxpPkEgY2xvc2luZyBkYXRlIGFuZCB0aW1lIGZvciB5b3VyIGJhbGxvdCBj YW4gYmUgc2V0LiBMZWF2ZSBibGFuayBvciBzZXQgdG8gJzAwLTAwLTAwIDAwOjAwOjAwJyBm b3IgYSBuZXZlciBlbmRpbmcgdm90ZS48L2xpPgogICAgICAgIDxsaT5PcHRpb24gdG8gc2hv dyByZXN1bHRzIGJlZm9yZSB2b3RpbmcgY2xvc2VzIG9yIG5vdC4gKFVubGVzcyBuZXZlci1l bmRpbmcgdm90ZSBjaG9zZW4pPC9saT4KICAgIDwvdWw+CgogICAgPGgyPkF1dGhvciAvIENy ZWRpdHM8L2gyPgoKICAgIDxwPmdlb2ZmNzc3IC0gdGhhbmtzIHRvIFN0ZWYgRGF3c29uIChC bG9rZSkgZm9yIGhpcyBhbWF6aW5nIGNvZGUgd2hpY2ggaGVscGVkIG1lIHRvIHVuZGVyc3Rh bmQgYSBsaXR0bGUgYWJvdXQgdGhlIGFuYXRvbXkgb2YgYSBwbHVnaW4uIFRoYW5rcyB0byB0 byBKdWtrYSAoR29jb20pIGZvciBtYWtpbmcgdGhlIHBsdWdpbiBtb3JlIHNlY3VyZS48L3A+ CgogICAgPGgyPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCiAgICA8cCBj bGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIFRleHRwYXR0ZXJuID8gLSBpdCB3YXMgd3JpdHRl biB1c2luZyA0LjQuMSBidXQgbWF5IHdlbGwgd29yayBpbiBlYXJsaWVyIHZlcnNpb25zPzwv cD4KCiAgICA8cD5FLW1haWwgZ2VvZmY3NzcgZm9yIGNvcGllcyBvZiB0aGUgcGx1Z2luIHRv IGFscGhhIHRlc3QuPC9wPgoKICAgIDxwPldoZW4geW91IGZpcnN0IHZpc2l0IHRoZSBFeHRl bnNpb24tJmd0O1ZvdGUgcGFnZSwgdGhlIGV4dHJhIHRhYmxlcyB3aWwgYmUgaW5zdGFsbGVk IGF1dG9tYXRpY2FsbHkuPC9wPgoKICAgIDxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0 ZSBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuIEJ1dCBub3RlIHRoZSBleHRy YSB0YWJsZXMgd2lsbCByZW1haW4gdW50aWwgeW91IGRlbGV0ZSB0aGVtIG1hbnVhbGx5LiBB dCBzb21lIGZ1dHVyZSBwb2ludCBpdCBtYXkgY2xlYW4gdXAgaXQncyBvd24gbWVzcywgdGhp bmsgb2YgdGhlIHBsdWdpbiBhcyBhIHRlZW5hZ2UgYm95IC4uLiBqdXN0IGJlIHRoYW5rZnVs IGl0IGdldHMgb3V0IG9mIGJlZCBhbmQgZG9lcyBhbnl0aGluZyBhdCBhbGwuPC9wPgoKICAg IDxoMj5Db25maWd1cmluZyBWb3RlIGRldGFpbHM8L2gyPgoKICAgIDxwPlZpc2l0IHRoZSBF eHRlbnNpb25zLSZndDtWb3RlIGNvbmZpZyB0YWIuIEFkZCB2b3RlcyB3aXRoIGEgdGl0bGUg YXQgbGVhc3QgdHdvIG9wdGlvbnMgcGx1cyBhbiBlbmQgZGF0ZSB0aW1lIHVubGVzcyB5b3Ug cmVxdWlyZSBhIG5ldmVyIGVuZGluZyBwb2xsLiBDU1MgY2xhc3NlcyBjYW4gYmUgYWRkZWQg dG8gbWFrZSB0aGUgcGx1Z2luJ3Mgb3V0cHV0IGZpdCBpbiB3aXRoIHlvdXIgc2l0ZS48L3A+ CgogICAgPGgyPkhvdyB0byBVc2U8L2gyPgoKICAgICAgICA8aDM+PGNvZGU+Jmx0O3R4cDpn ZW9fdm90ZXMgIHZvdGVfaWQ9JnF1b3Q7aW50ZWdlciZxdW90OyAvJmd0OzwvY29kZT48L2gz PgoKICAgIDxwPlRoYXQncyBpdCEgT25lIHRhZyB3aXRoIG9uZSBhdHRyaWJ1dGUuPC9wPgoK ICAgIDxwPjxjb2RlPnZvdGVfaWQ8L2NvZGU+IGlzIGdlbmVyYXRlZCBieSBhdXRvX2luY3Jl bWVudCB3aGVuIHlvdSBhZGQgYSBuZXcgdm90ZSBvbiB0aGUgRXh0ZW5zaW9ucyZndDtWb3Rl IHRhYi4gSnVzdCBwdXQgdGhlIHZvdGVfaWQgaW4gdGhlIHRhZyBhbmQgeW91ciB2b3RlIHdp bGwgYXBwZWFyLjwvcD4KCiAgICAgICAgPHA+RXhhbXBsZTotIDxjb2RlPiZsdDt0eHA6Z2Vv X3ZvdGVzIHZvdGVfaWQ9JnF1b3Q7MSZxdW90OyAvJmd0OzwvY29kZT48L3A+CgogICAgPHA+ VGhlIHRhZyBjYW4gYmUgdXNlZCBhbnl3aGVyZS4gSW4gYXJ0aWNsZXMsIGFydGljbGUgbGlz dHMsIHNpZGViYXJzLCBmb290ZXJzIG9yIGhlYWRlcnMuPC9wPgoKICAgICAgICA8cD5Qb3Nz aWJsZSBwcm9ibGVtczotIHBhZ2V0b3AoKSBlcnJvciAtIHlvdSd2ZSBwcm9iYWJseSB1c2Vk IGdlb192b3RlIGluc3RlYWQgb2YgZ2VvX3ZvdGVzLiAoSSB3YW50IHRoZSBwdWJsaWMgdGFn IHRvIGJlIGdlb192b3RlIGJ1dCBhbiBhZG1pbiBmdW5jdGlvbiB1c2VzIGdlb192b3RlIGFu ZCB3aGVuIEkgY2hhbmdlIGl0IHRoZSBwbHVnaW4gcm9sbHMgb3ZlciBhbmQgZGllcy4gSWYg YW55b25lIGNhbiBhc3Npc3Qgd2l0aCB0aGlzIEknZCBsaWtlIHRoZSBwdWJsaWMgdGFnIHRv IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcGx1Z2luLik8L3A+CgogICAgICAgIDxwPlRo ZSBwbHVnaW4gZG9lc24ndCBzb3J0IHRoZSByZXN1bHRzLCB0aGlzIG9wdGlvbiB3aWxsIHBy b2JhYmx5IGJlIGFkZGVkLjwvcD4KICAgICAgICA8cD5UaGUgcGx1Z2luIGN1cnJlbnRseSBo YXMgYSBmaXhlZCBudW1iZXIgb2Ygdm90ZSBvcHRpb25zICgxMCkuIEkgcmVhbGlzZSB0aGlz IHNob3VsZCBiZSBtb3JlIGZsZXhpYmxlIGJ1dCBJIHdhbnRlZCB0byBnZXQgdGhlIHBsdWdp biB3b3JraW5nLCBzbyBJJ3ZlIHdyaXR0ZW4gaXQga25vd2luZyBpdCBoYXMgbGltaXRhdGlv bnMgdGhhdCBJIHdpbGwgY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlcy48L3A+CgoKICAgICAg ICA8aDI+Q1NTPC9oMj4KICAgICAgICA8cD5BZGQgeW91ciBvd24gQ1NTIGNsYXNzZXMgaW4g dGhlIEV4dGVuc2lvbnMgVm90ZSB0YWIuIFRoZXkgYXJlIG5hbWVkIHRvIGJlIGZhaXJseSBv YnZpb3VzLiBPbmUgY2xhc3MgZm9yIHRoZSByZXN1bHRzIGJhcnMgaXMgaGFyZCBjb2RlZCwg WW91IGNhbiBub3cgICgwLjEuNCkgY2hhbmdlIHRoZSBjb2xvdXIuPC9wPgoKICAgIDxoMj5D aGFuZ2Vsb2c8L2gyPgoKICAgIDx1bD4KICAgICAgICA8bGk+MjIgRmViIDIwMTIgfCAwLjEu MyB8IEluaXRpYWwgKG5vbi1wdWJsaWMpIHJlbGVhc2U8L2xpPgogICAgICAgIDxsaT4yOCBG ZWIgMjAxMiB8IDAuMS40IHwgRml4ZWQgbG90cyBvZiBzZWN1cml0eSBpc3N1ZXMgLSB0aGFu a3MgR29jb20gLSBSZW1vdmVkICdub25lJyBmcm9tIEZyYXVkIG1ldGhvZHMuIE5vdyBhIGZy YXVkIG1ldGhvZCBtdXN0IGJlIHVzZWQuIElmIENvb2tpZSBjYW4ndCBiZSBzZXQgSVAgaXMg bm93IHN0b3JlZC4gTm93IG9ubHkgb25lIGNvb2tpZSBpcyB1c2VkIGFuZCBhIGhhc2ggdmFs dWUgaXMgc3RvcmVkLiBYSFRNTCBub3cgdmFsaWRhdGVzLiBCYWxsb3QgZm9ybSBwb3N0IHZh cmlhYmxlcyBhcmUgbm93IGNhc3QgYXMgaW50ZWdlcnMuIENoYW5nZWQgZEJhc2UgbmFtZXMu IEFkZGVkIGZpZWxkcy4gVm90ZSB0b3RhbHMgbm93IHN0b3JlZCBpbnN0ZWFkIG9mIGR5bmFt aWNhbGx5IGNhbGN1bGF0ZWQuIFRoZSBiYWxsb3QgZm9ybSBub3cgdGltZXMgb3V0IGFmdGVy IDEwIG1pbnV0ZXMgYW5kIGEgaGFzaCBpcyBpbmNsdWRlZCB0aGF0IG11c3QgdmFsaWRhdGUu IEEgbmV3IHRhYmxlIGhhcyBiZWVuIGFkZGVkIHRvIGhvbGQgdGhlIGhhc2gga2V5cy4gVGhp cyB0YWJsZSBpcyBhdXRvbWF0aWNhbGx5ICdjbGVhbmVkJyBvZiBvbGQgdmFsdWVzLiBBIG5l dyBmaWVsZCBtZWFucyB5b3UgY2FuIGNoYW5nZSB0aGUgY29sb3VyIG9mIHRoZSByZXN1bHRz IGJhciBncmFwaC48L2xpPgogICAgPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVH SU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI2dlb19oZWxwIHsgbGlu ZS1oZWlnaHQ6MS41IDt9CiNnZW9faGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9u dDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dy b3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNnZW9faGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWln aHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAj ZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6 MTBweDsgfQojZ2VvX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lh LCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojZ2VvX2hl bHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAw IDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI2dl b19oZWxwIGgzIHsgY29sb3I6ICMyNzU2ODU7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt9CiNnZW9f aGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNw YWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2Fz ZTsgfQojZ2VvX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojMzNkOyB9 CiNnZW9faGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQg Izk5OTsgfQojZ2VvX2hlbHAgdGFibGUge3dpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7 IHBhZGRpbmctYm90dG9tOjFlbTt9CiNnZW9faGVscCB0ZCwgI2dlb19oZWxwIHRoIHtib3Jk ZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwO30KI2dlb19oZWxwIHVsIHsgbGlz dC1zdHlsZS10eXBlOnNxdWFyZTsgfQojZ2VvX2hlbHAgLnJlcXVpcmVkIHtjb2xvcjpyZWQ7 fQojZ2VvX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI2dlb19oZWxw IC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVH SU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiNGNiMWQ1MmYwNmY0MzcwMTI5ZjVl NDNiMmY1NDEyYjUiO30=