# Name: smd_prognostics v0.15 # Type: Admin/Public side plugin # Pro-active diagnostics that alarm when things have changed in TXP # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 1 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcHJvZ25vc3RpY3MiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTUiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFRYUCI7czo0OiJjb2RlIjtzOjY1NjI2OiIvLyBUT0RPOiBjaGVj ayBudW1iZXIgb2YgZmlsZSBhZGRpdGlvbnMgcGVyIGRpciAoaGFzaCB0aGUgZW50aXJlIGRp ciBpbiBvbmUgb3BlcmF0aW9uPykgYW5kIG9ubHkgcmVhZCB0aGUgZmlsZXMgaWYgdGhlcmUn cyBhIGRpZmZlcmVuY2UNCmdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3By b2dub3N0aWNzX2NoZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zcWxwcm90Ow0KJHNtZF9w cm9nbm9zdGljc19ldmVudCA9ICdzbWRfcHJvZ25vc3RpY3MnOw0KJHNtZF9wcm9nbm9zdGlj c19jaGVja3N1bXMgPSBydHJpbShnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4 cGF0aCwgMSksIERTKSAuIERTIC4gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgn LCAnJykuJ3NtZF9wcm9nbm9zdGljc19jaGVja3N1bXMudHh0JzsNCiRoZHJvbiA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnLCAnJyk7DQokc21kX3Byb2dub3N0 aWNzX3NxbHByb3QgPSBuZXcgc21kX3Byb2dfUGhQcm90ZWN0b3IoZmFsc2UpOw0KDQppZiAo QHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3Nf c3R5bGUsICR0eHBfdXNlciwgJGV2ZW50Ow0KDQoJJHNtZF9wcm9nbm9zdGljc19wcml2cyA9 ICcxLDInOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MgPSBncHMoJ3NtZF9wcm9nbm9z dGljc19zdXBwcmVzcycpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3R5bGUgPSBhcnJheSgNCgkJ J21zZycgPT4NCiAgICAgICAgICcuc21kX3Byb2dfd2FybiB7IG1hcmdpbjowIGF1dG8gMTBw eDsgd2lkdGg6NTAwcHg7IGJhY2tncm91bmQ6I2ZmYzsgYm9yZGVyOjJweCBkYXNoZWQgcmVk OyBwYWRkaW5nOjEwcHg7IGNvbG9yOiM0NDQ7IH0NCiAgICAgICAgICAuc21kX3Byb2dfd2Fy biBhIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Izk2MzsgfQ0KICAgICAgICAgIC5zbWRf cHJvZ193YXJuIHNwYW4geyBmb250LXdlaWdodDpib2xkOyB9DQogICAgICAgICAgLnNtZF9w cm9nX3dhcm4gZGl2IHsgZm9udC13ZWlnaHQ6Ym9sZDsgcGFkZGluZy1ib3R0b206MTBweDsg fScsDQoJCSdzZXR1cCcgPT4NCiAgICAgICAgICcuc21kX2xhYmVsIHsgdGV4dC1hbGlnbjpy aWdodCFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRsZTsgfQ0KICAgICAgICAgIC5z bWRfcHJvZ19idG5zIGZvcm0geyBkaXNwbGF5OmlubGluZTsgfQ0KICAgICAgICAgIC5zbWRf cHJvZ25vc3RpY3Nfc2V0dXAgaDMgeyBtYXJnaW46MjVweCAwIDA7IH0nLA0KCQknbWV0ZXIn ID0+DQogICAgICAgICAnI3NtZF9wcm9nX21ldGVyIHsgbWFyZ2luOjAgYXV0bzsgYm9yZGVy OjFweCBzb2xpZCAjY2NjOyB3aWR0aDozNjBweDsgcGFkZGluZzo1cHg7IGZvbnQtc2l6ZTox MjAlOyB9DQogICAgICAgICAgLnNtZF9wcm9nX3Bhc3Nfc3RyZW5ndGggeyBjb2xvcjpncmVl bjsgZm9udC13ZWlnaHQ6Ym9sZDsgfScsDQoJCSdhZHZpY2UnID0+DQogICAgICAgICAnLnNt ZF9wcm9nX2FkdmljZSB7IHdpZHRoOjc1MHB4OyB9DQogICAgICAgICAgI2xpc3Quc21kX3By b2dfYWR2aWNlIHRkIHsgcGFkZGluZzo1cHg7IH0NCiAgICAgICAgICAuc21kX3Byb2dfYnRu cyB7IHdpZHRoOjE0MHB4OyB9JywNCgkpOw0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJp dnMiLCAidHhwX3VzZXJzIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIiciKTsN CgkkdXNlcnMgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3VzZXJzJywgJycpOw0KCSRh bGxvdyA9ICgkdXNlcnMpID8gaW5fYXJyYXkoJHR4cF91c2VyLCBkb19saXN0KCR1c2Vycykp IDogdHJ1ZTsNCglpZiAoJGFsbG93KSB7DQoJCWFkZF9wcml2cygkc21kX3Byb2dub3N0aWNz X2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3ByaXZzKTsNCgkJYWRkX3ByaXZzKCdwbHVnaW5f cHJlZnMuJy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3ByaXZz KTsNCgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJHNtZF9wcm9nbm9zdGljc19ldmVu dCwgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljcycpKTsNCgkJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19zZXR1cCcsICdwbHVnaW5fcHJlZnMuJy4k c21kX3Byb2dub3N0aWNzX2V2ZW50KTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9n bm9zdGljc19kaXNwYXRjaGVyJywgJHNtZF9wcm9nbm9zdGljc19ldmVudCk7DQoJfQ0KDQoJ Ly8gUGFzc3dvcmQgY2hlY2tlciBnb2VzIG9uIHRoZSBBZG1pbi0+VXNlcnMgdGFiIGZvciBh bGwgdXNlcnMNCglpZiAoJGV2ZW50ID09ICdhZG1pbicpIHsNCgkJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJlbmd0aCcsICdhZG1pbl9zaWRlJywgJ2hl YWRfZW5kJyk7DQoJfQ0KDQoJaWYgKCRoZHJvbikgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVhZGVycycsICdhZG1pbl9zaWRlJywgJ2hlYWRf ZW5kJyk7DQoJfQ0KDQoJLy8gQWRtaW4gc2lkZSBjYWxsYmFjayBmb3IgY2hlY2tpbmcgZmls ZXMNCglpZiAoISRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MgJiYgaW5fYXJyYXkoJHByaXZz LCBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3NfcHJpdnMpKSkgew0KCQlyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3Byb2dub3N0aWNzJywgJ2FkbWluX3NpZGUnLCAncGFnZXRvcF9lbmQnKTsN Cgl9DQp9DQoNCi8vIFB1YmxpYyBzaWRlIGNhbGxiYWNrcw0KaWYgKHN0cnBvcyhnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlJywgJycpLCAncHVibGljJykgIT09IGZh bHNlKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljcycsICdwcmV0ZXh0 Jyk7DQp9DQppZiAoJGhkcm9uKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9z dGljc19yZXF1ZXN0X2hlYWRlcnMnLCAncHJldGV4dCcpOw0KfQ0KaWYgKHN0cnBvcyhnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAnc21kX25vJyksICdzbWRfbm8n KSA9PT0gZmFsc2UpIHsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QnLCAncHJldGV4dCcpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19kaXNwYXRjaGVyKCRldnQsICRzdHApIHsN CglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0cCwgYXJyYXkoDQoJCQknc21kX3Byb2dub3N0 aWNzX2ZpbGVzJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nfc2V0dXAnLA0KCQkJJ3NtZF9wcm9n bm9zdGljc19hZHZpY2UnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19hY2snLA0KCQkpKSkgew0K CQlzbWRfcHJvZ25vc3RpY3Nfc2V0dXAoJycpOw0KCX0gZWxzZSAkc3RwKCk7DQp9DQoNCi8v IFN0dWIgdG8gY2FsbCB0aGUgdmVyaWZpY2F0aW9uIGNvZGUgZnJvbSB0aGUgVVJMDQpmdW5j dGlvbiBzbWRfcHJvZ25vc3RpY3MoJGV2dCwgJHN0cCkgew0KCXJldHVybiBzbWRfZG9fcHJv Z25vc3RpY3MoKTsNCn0NCg0KLy8gVmVyaWZ5IHRoZSBmaWxlIGNoZWNrc3Vtcw0KLy8gJG1v ZGUgPSAwOiBub3JtYWwgLyAxOiBubyB1cGRhdGUgKHJldHVybiBhcnJheXMgb25seSkgLyAy OiBzaWxlbnQgdXBkYXRlDQpmdW5jdGlvbiBzbWRfZG9fcHJvZ25vc3RpY3MoJG1vZGU9MCkg ew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX2No ZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zdHlsZTsNCg0KCSRub3cgPSB0aW1lKCk7DQoJ JG5vayA9ICRtaXNzID0gJGFkZGVkID0gJGFsbGZpbGVzID0gJGhhc2hkb3duID0gJGhhc2ht b2QgPSBhcnJheSgpOw0KCSR0aW1lbm93ID0gZGF0ZSgnSDppOnMnLCAkbm93KTsNCglsaXN0 KCRiZWcsICRlbmQpID0gZG9fbGlzdChnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNr X2JldHdlZW4nLCAnfCcpLCAnfCcpOyAvLyBEZWZhdWx0IGlzIHBpcGUgc28gd2UgY2FuIGd1 YXJhbnRlZSB0d28gcmV0dXJuIHZhbHMNCgkkdGRpZmYgPSAoJG1vZGU9PTEgfHwgKCRub3cg LSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RjaGVjaycsIDApID4gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19jaGVja19mcmVxJywgMzYwMCkpICYmICgkdGltZW5vdz4kYmVn KSAmJiAoJHRpbWVub3c8JGVuZCkgKSA/IHRydWUgOiBmYWxzZTsNCg0KCS8vIFBhcnRzIHNo YW1lbGVzc2x5IHBsYWdpYXJpc2VkIGZyb20gdHhwX2RpYWcNCglpZiAoJHRkaWZmKSB7DQoJ CSRzdW1oYXNoID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zdW1oYXNoJywgTlVMTCwg KCRtb2RlPT0xID8gMSA6IDApKTsNCgkJJGxvb2thdCA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfY2hlY2tfZm9yJywgJycpOw0KCQkkYWRkcyA9IChzdHJwb3MoJGxvb2thdCwgJ2Fk ZCcpICE9PSBmYWxzZSk7DQoJCSRkZWxzID0gKHN0cnBvcygkbG9va2F0LCAnZGVsZXRlJykg IT09IGZhbHNlKTsNCgkJJG1vZHMgPSAoc3RycG9zKCRsb29rYXQsICdtb2RpZnknKSAhPT0g ZmFsc2UpOw0KDQoJCWlmICgkY3MgPSBAZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vt cykpIHsNCgkJCSRoYXNoID0gbWQ1KHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJHNtZF9w cm9nbm9zdGljc19jaGVja3N1bXMpKTsNCgkJCWlmICgkaGFzaCAhPSAkc3VtaGFzaCkgew0K CQkJCSRoYXNobW9kW10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCgkJCX0gZWxz ZSB7DQoJCQkJJGN0ciA9IDA7DQoJCQkJJHF0eV9wZXIgPSAoKCRxdHkgPSBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2NoZWNrX3F0eScsICcnKSkgPT0gJycpID8gY291bnQoJGNzKSA6 ICRxdHk7DQoJCQkJJHNvX2ZhciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcXR5X3Nv X2ZhcicsIDApOw0KCQkJCSR1bnRpbCA9ICRzb19mYXIgKyAkcXR5X3BlcjsNCgkJCQlmb3Jl YWNoICgkY3MgYXMgJGMpIHsNCgkJCQkJaWYgKHByZWdfbWF0Y2goJ0BeKFxTKyk6IFwoKC4q KVwpJEAnLCB0cmltKCRjKSwgJG0pKSB7DQoJCQkJCQlsaXN0KCwkZmlsZSwkbWQ1KSA9ICRt Ow0KCQkJCQkJaWYgKCRkZWxzICYmICFmaWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJCQkJCQkk bWlzc1tdID0gJGZpbGU7DQoJCQkJCQl9IGVsc2UgaWYgKCRtb2RzICYmICRtZDUgIT0gJ05V TEwnKSB7DQoJCQkJCQkJaWYgKCBmaWxlX2V4aXN0cygkZmlsZSkgJiYgKCAoKCRjdHIgPj0g JHNvX2ZhcikgJiYgKCRjdHIgPCAkdW50aWwpIHx8ICRtb2RlID09IDEpICkgKSB7DQoJCQkJ CQkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkZmlsZSk7DQoJCQkJ CQkJCWlmICgobWQ1KCRjb250ZW50KSAhPSAkbWQ1KSAmJiAoJGZpbGUgIT0gJHNtZF9wcm9n bm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQkJCQkJCQkkbm9rW10gPSAkZmlsZTsNCgkJCQkJ CQkJfQ0KCQkJCQkJCX0NCgkJCQkJCQkkY3RyKys7DQoJCQkJCQl9DQoJCQkJCQkkYWxsZmls ZXNbXSA9ICRmaWxlOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gU3Rhc2ggdGhlIHN0b3J5 IHNvIGZhciByZWFkeSBmb3IgbmV4dCB0aW1lIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQNCgkJ CQlpZiAoJG1vZGUgIT0gMSkgew0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3F0 eV9zb19mYXInLCAoKCR1bnRpbCA8ICRjdHIpID8gJHVudGlsIDogMCksICdzbWRfcHJvZ25v cycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCX0NCgkJCQlpZiAoJGFkZHMp IHsNCgkJCQkJJGZpbGVsaXN0ID0gc21kX3Byb2dub3N0aWNzX3JlYWRmaWxlcygpOw0KCQkJ CQkkYWRkZWQgPSBhcnJheV9kaWZmKCRmaWxlbGlzdCwgJGFsbGZpbGVzKTsNCgkJCQl9DQoN CgkJCQlpZiAoJG1vZGUgIT0gMSkgew0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2xhc3RjaGVjaycsICRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9p bnB1dCcpOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIHsNCgkJCS8vIEZpbGUgZG9lc24ndCBl eGlzdA0KCQkJJGhhc2hkb3duW10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCgkJ fQ0KCX0NCg0KCS8vIEFzc2VtYmxlIG1lc3NhZ2UNCglpZiAoJG5vayB8fCAkbWlzcyB8fCAk YWRkZWQgfHwgJGhhc2hkb3duIHx8ICRoYXNobW9kKSB7DQoJCWlmICgkbW9kZT09MSkgew0K CQkJcmV0dXJuIGFycmF5KCRub2ssICRtaXNzLCAkYWRkZWQsICRoYXNoZG93biwgJGhhc2ht b2QpOw0KCQl9IGVsc2Ugew0KCQkJJHZpYSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bm90aWZ5X3ZpYScsICcnKTsNCgkJCSRkZXRlY3QgPSBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX2xhc3RkZXRlY3QnLCAnJyk7DQoJCQkkbGFzdHMgPSBleHBsb2RlKCcsJywgZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgMCkpOw0KCQkJJGZyZXFzID0gZXhwbG9k ZSgnLCcsIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScsIDg2NDAwKSk7 DQoJCQlpZiAoIWlzc2V0KCRsYXN0c1sxXSkpIHsNCgkJCQkkbGFzdHNbMV0gPSAkbGFzdHNb MF07DQoJCQl9DQoJCQlpZiAoIWlzc2V0KCRmcmVxc1sxXSkpIHsNCgkJCQkkZnJlcXNbMV0g PSAkZnJlcXNbMF07DQoJCQl9DQoNCgkJCSRsYXN0YWN0X3R4cCA9ICgkbW9kZSA8IDIgJiYg KCRub3cgLSAkbGFzdHNbMF0gPiAkZnJlcXNbMF0pKSA/IHRydWUgOiBmYWxzZTsNCgkJCSRs YXN0YWN0X21haWwgPSAoJG1vZGUgPCAyICYmICgkbm93IC0gJGxhc3RzWzFdID4gJGZyZXFz WzFdKSkgPyB0cnVlIDogZmFsc2U7DQoJCQkkbGFzdG1zZyA9IGdldF9wcmVmKCdzbWRfcHJv Z25vc3RpY3NfbGFzdG1zZycsICcnKTsNCg0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnc3ViamVjdCcpOw0KCQkJJG1zZyA9IGpvaW4oJ3wnLCBhcnJheV9tZXJnZSgk aGFzaGRvd24sICRoYXNobW9kLCAkbm9rLCAkbWlzcywgJGFkZGVkKSk7DQoNCgkJCWlmIChA dHhwaW50ZXJmYWNlID09ICdhZG1pbicgJiYgc3RycG9zKCR2aWEsICd0eHAnKSAhPT0gZmFs c2UpIHsNCgkJCQlpZiAoJGxhc3RhY3RfdHhwIHx8ICgkbGFzdG1zZyAhPSBtZDUoJG1zZykp KSB7DQoJCQkJCSR0eHBkaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3R4cGRpcics IGh1LnNtZF9wcm9nbm9zdGljc19ndWVzc19hZG1pbl9kaXIoKSk7DQoJCQkJCSRvdXQgPSAn PHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ21zZydd Lic8L3N0eWxlPjxkaXYgY2xhc3M9InNtZF9wcm9nX3dhcm4iPjxkaXY+Jy4kc3ViamVjdC4n PC9kaXY+Jy4NCgkJCQkJCSgoJGhhc2hkb3duKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19n VHh0KCdwcmVhbWJsZV9oYXNoZG93bicpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxp PicsJGhhc2hkb3duKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRoYXNobW9kKSA/ ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9oYXNobW9kJykuJzwvcD48 dWw+PGxpPicuam9pbignPC9saT48bGk+JywkaGFzaG1vZCkuJzwvbGk+PC91bD4nIDogJycp Lg0KCQkJCQkJKCgkbm9rKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9ub2snKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRub2spLic8L2xpPjwv dWw+JyA6ICcnKS4NCgkJCQkJCSgoJG1pc3MpID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dU eHQoJ3ByZWFtYmxlX21pc3MnKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRt aXNzKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRhZGRlZCkgPyAnPHA+Jy5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfYWRkZWQnKS4nPC9wPjx1bD48bGk+Jy5qb2lu KCc8L2xpPjxsaT4nLCRhZGRlZCkuJzwvbGk+PC91bD4nIDogJycpLg0KCQkJCQkJJzxwPjxh IGhyZWY9IicuJHR4cGRpci4nL2luZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3Nf ZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJnNtZF9wcm9nbm9zdGljc19z dXBwcmVzcz0xIj4nLg0KCQkJCQkJc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Bvc3RhbWJsZScp Lic8L2E+PC9wPjwvZGl2Pic7DQoNCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19s YXN0YWN0JywgJG5vdy4nLCcuJGxhc3RzWzFdLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERF TiwgJ3RleHRfaW5wdXQnKTsNCgkJCQkJZWNobyAkb3V0Ow0KCQkJCX0NCgkJCX0NCg0KCQkJ aWYgKHN0cnBvcygkdmlhLCAnZW1haWwnKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAoJGxhc3Rh Y3RfbWFpbCB8fCAoJGxhc3Rtc2cgIT0gbWQ1KCRtc2cpKSkgew0KCQkJCQkkdG8gPSBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX21haWx0bycsICcnKTsNCgkJCQkJaWYgKCR0bykgew0K CQkJCQkJJGhkcnMgPSBzbWRfcHJvZ25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9wcm9nbm9z dGljcycpOw0KCQkJCQkJJGJvZHkgPQ0KCQkJCQkJCSgoJGhhc2hkb3duKSA/IG4uc21kX3By b2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2hhc2hkb3duJykubi5uLmpvaW4obiwkaGFzaGRv d24pIDogJycpLg0KCQkJCQkJCSgoJGhhc2htb2QpID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4 dCgncHJlYW1ibGVfaGFzaG1vZCcpLm4ubi5qb2luKG4sJGhhc2htb2QpIDogJycpLg0KCQkJ CQkJCSgoJG5vaykgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5u Lm4uam9pbihuLCRub2spIDogJycpLg0KCQkJCQkJCSgoJG1pc3MpID8gbi5uLnNtZF9wcm9n bm9zdGljc19nVHh0KCdwcmVhbWJsZV9taXNzJykubi5uLmpvaW4obiwkbWlzcykgOiAnJyku DQoJCQkJCQkJKCgkYWRkZWQpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9hZGRlZCcpLm4ubi5qb2luKG4sJGFkZGVkKSA6ICcnKS4NCgkJCQkJCQluLm4uJzxhIGhy ZWY9IicuJGhkcnNbJ3R4cGRpciddLicvaW5kZXgucGhwP2V2ZW50PScuJHNtZF9wcm9nbm9z dGljc19ldmVudC4nJnN0ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nf c3VwcHJlc3M9MSI+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG9zdGFtYmxlJykuJzwvYT4n Ow0KCQkJCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMnXSk7 DQoJCQkJCX0NCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgJGxh c3RzWzBdLicsJy4kbm93LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5w dXQnKTsNCgkJCQl9DQoJCQl9DQoJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3Rt c2cnLCBtZDUoJG1zZyksICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcpOw0KCQkJaWYgKCRsYXN0bXNnICE9IG1kNSgkbXNnKSkgew0KCQkJCWlmICgkZGV0ZWN0 ID09ICcnKSB7DQoJCQkJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcs ICRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJ CX0gZWxzZSB7DQoJCQkJCSRkZXRlY3QgPSBleHBsb2RlKCcsJywkZGV0ZWN0KTsNCgkJCQkJ c2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJGRldGVjdFswXS4nLCcu JG5vdywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tICBDYXRjaCB1bmV4cGVjdGVk IHJlcXVlc3QgaGVhZGVycw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVh ZGVycygkZXZ0LCAkc3RwKSB7DQoJJGJsb2NrID0gZXhwbG9kZSgnfCcsIGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnLCAnJykpOw0KCSRoZHIgPSBzZXJ2ZXJTZXQo J1JFUVVFU1RfTUVUSE9EJyk7DQoNCglpZiAoaW5fYXJyYXkoJGhkciwgJGJsb2NrKSkgew0K CQkkc2VuZCA9IChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNp Y3MnKSwgJ2hkcicpICE9PSBmYWxzZSk7DQoNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9m ZiBpZiBuZWNlc3NhcnkNCgkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWls dG9fY3NpJywgJycpOw0KCQlpZiAoJHRvICYmICRzZW5kKSB7DQoJCQkkc3ViamVjdCA9IHNt ZF9wcm9nbm9zdGljc19nVHh0KCdzdWJqZWN0X2NzaScpOw0KCQkJJGhkcnMgPSBzbWRfcHJv Z25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGljcycpOw0KCQkJJGJvZHkgPSBu LnNtZF9wcm9nbm9zdGljc19nVHh0KCdyZXFfbm90X2FsbG93ZWQnLCBhcnJheSgne3JlcX0n ID0+ICRoZHIpKS5uOw0KCQkJZm9yZWFjaCAoJF9TRVJWRVIgKyAkX1JFUVVFU1QgKyAkX0VO ViBhcyAka2V5ID0+ICR2YXIpIHsNCgkJCQkkYm9keSAuPSBuLiRrZXkuJzogJy4kdmFyOw0K CQkJfQ0KCQ0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMn XSk7DQoJCX0NCg0KCQkvL1RPRE86IG9mZmVyIGFsdGVybmF0aXZlIGRpZSBtZWNoYW5pc21z IGxpa2UgU1FMIGF0dGFja3M/DQoJCWV4aXQoMSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0t ICBTUUwgaW5qZWN0aW9uIGRldGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QoKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdCwgJHBlcm1s aW5rX21vZGU7DQoNCgkvLyBEZXRlcm1pbmUgY29tbWVudCBwcmV2aWV3IHN0ZXAgYW5kIGln bm9yZSBpZiBzbw0KCSRpc19wcmV2dSA9IGZhbHNlOw0KCSRjb20gPSBwc2EoYXJyYXkoDQoJ CSdwYXJlbnRpZCcsDQoJCSdwcmV2aWV3JywNCgkJJ2JhY2twYWdlJywNCgkpKTsNCglpZiAo JGNvbVsncHJldmlldyddKSB7DQoJCSR1cmxwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkY29tWydi YWNrcGFnZSddKTsNCgkJJG51bSA9ICgkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knKSA/IDEg OiBjb3VudCgkdXJscGFydHMpOw0KCQkkYXJ0aWMgPSBzYWZlX2ZpZWxkKCdpZCcsJ3RleHRw YXR0ZXJuJywgIklEPSIuZG9TbGFzaCgkY29tWydwYXJlbnRpZCddKS4oKCRudW0gPiAxKSA/ ICIgQU5EIHVybF90aXRsZT0nIi5kb1NsYXNoKCR1cmxwYXJ0c1skbnVtLTFdKS4iJyIgOiAn JykpOw0KCQkkaXNfcHJldnUgPSAoJGFydGljKSA/IHRydWUgOiBmYWxzZTsNCgl9DQoJaWYo ISRpc19wcmV2dSAmJiAkc21kX3Byb2dub3N0aWNzX3NxbHByb3QtPmlzTWFsaWNpb3VzKCkp IHsNCgkJJG9wdHMgPSBkb19saXN0KGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2lu amVjdCcsICd8JyksICd8Jyk7DQoJCSRibG9rID0gKHN0cnBvcygkb3B0c1swXSwgJ3NtZF9i bG9jaycpICE9PSBmYWxzZSk7DQoJCSRzZW5kID0gKHN0cnBvcyhnZXRfcHJlZignc21kX3By b2dub3N0aWNzX3J0X2ZvcmVuc2ljcycpLCAnc3FsJykgIT09IGZhbHNlKTsNCgkJJHZlciA9 IChkZWZpbmVkKCd0eHBfdmVyc2lvbicpKSA/IHR4cF92ZXJzaW9uIDogZ2V0X3ByZWYoJ3Zl cnNpb24nLCAnJyk7DQoNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9mZiBpZiBuZWNlc3Nh cnkNCgkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJycp Ow0KCQlpZiAoJHRvICYmICRzZW5kKSB7DQoJCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9zdGlj c19nVHh0KCdzdWJqZWN0X2NzaScpOw0KCQkJJGhkcnMgPSBzbWRfcHJvZ25vc3RpY3NfaGVh ZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGljcycpOw0KCQkJJGJvZHkgPSBuLnNtZF9wcm9nbm9z dGljc19nVHh0KCdwcmVhbWJsZV9zcWxfaW5qZWN0JykubjsNCgkJCSRib2R5IC49ICgoJHZl cikgPyAnVFhQOiAnIC4gJHZlciAubiA6ICcnKSAuICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkg Lm4uICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxh YmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAnQXBhY2hlOiAnIC4gYXBhY2hlX2dldF92 ZXJzaW9uKCkubiA6ICcnKTsNCgkJCWZvcmVhY2ggKCRfU0VSVkVSICsgJF9SRVFVRVNUICsg JF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkJJGJvZHkgLj0gbi4ka2V5Lic6ICcuJHZh cjsNCgkJCX0NCg0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRl cnMnXSk7DQoJCX0NCg0KCQlpZiAoaXNzZXQoJG9wdHNbMV0pICYmICFlbXB0eSgkb3B0c1sx XSkpIHsNCgkJCSRwYXJ0cyA9IGRvX2xpc3QoJG9wdHNbMV0sICc6Jyk7DQoJCQlpZiAoJHBh cnRzWzBdID09ICd0eHBfZm9ybScpIHsNCgkJCQkkbXNnID0gcGFyc2VfZm9ybSgkcGFydHNb MV0pOw0KCQkJfSBlbHNlIHsNCgkJCQkkbXNnID0gJG9wdHNbMV07DQoJCQl9DQoJCX0gZWxz ZSB7DQoJCQkkbXNnID0gJyc7DQoJCX0NCg0KCQlpZiAoJGJsb2spIHsNCgkJCWVjaG8gJG1z ZzsNCgkJCWV4aXQoMSk7DQoJCX0gZWxzZSB7DQoJCQl0eHBfZGllKCRtc2csICRvcHRzWzBd KTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFkbWluLXNpZGUg cGFuZWxzDQovLyAtLS0tLS0tLS0tLS0tLS0tLQ0KLy8gLS0tLS0tLS0tLSAgQWxhcm0gYWNr bm93bGVkZ2VtZW50DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfYWNrKCRtc2c9JycpIHsN CglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVj a3N1bXMsICRwcmVmczsNCg0KCSRzdWJtaXQgPSBncHMoJ3N1Ym1pdCcpOw0KCSRpZ25vcmUg PSBncHMoJ2lnbm9yZScpOw0KCSRjc2kgPSBncHMoJ2NzaScpOw0KDQoJJGFjayA9IGdwcygn c2VsZWN0ZWQnKTsNCgkkc21kX3Byb2dfYWNrID0gKGlzX2FycmF5KCRhY2spKSA/ICRhY2sg OiAoKCRhY2spID8gYXJyYXkoJGFjaykgOiBhcnJheSgpKTsNCg0KCSRvdXQgPSBhcnJheSgp Ow0KDQoJaWYgKCRzdWJtaXQgPT0gJ0Fja25vd2xlZGdlJyB8fCAkaWdub3JlID09ICdJZ25v cmUnKSB7DQoJCWlmICgkY3MgPSBAZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vtcykp IHsNCgkJCWZvcmVhY2ggKCRjcyBhcyAkYykgew0KCQkJCWlmIChwcmVnX21hdGNoKCdAXihc UyspOiBcKCguKilcKSRAJywgdHJpbSgkYyksICRtKSkgew0KCQkJCQlsaXN0KCwkZmlsZSwk bWQ1KSA9ICRtOw0KCQkJCQlpZiAoKCRrZXkgPSBhcnJheV9zZWFyY2goJGZpbGUsICRzbWRf cHJvZ19hY2spKSAhPT0gZmFsc2UpIHsNCgkJCQkJCWlmIChmaWxlX2V4aXN0cygkZmlsZSkp IHsNCgkJCQkJCQkkY29udGVudCA9IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUp Ow0KCQkJCQkJCSRvdXRbXSA9ICRmaWxlLic6ICgnLiggKCRpZ25vcmUgPT0gJ0lnbm9yZScp ID8gJ05VTEwnIDogbWQ1KCRjb250ZW50KSApLicpJzsNCgkJCQkJCX0NCgkJCQkJCS8vIFJl bW92ZSBmaWxlcyB0aGF0IGFscmVhZHkgaGF2ZSBjaGVja3N1bXMgc28gd2UncmUgbGVmdCB3 aXRoIGFkZGl0aW9ucw0KCQkJCQkJdW5zZXQoJHNtZF9wcm9nX2Fja1ska2V5XSk7DQoJCQkJ CX0gZWxzZSB7DQoJCQkJCQkkb3V0W10gPSB0cmltKCRjKTsNCgkJCQkJfQ0KCQkJCX0NCgkJ CX0NCg0KCQkJLy8gVGFjayBvbiBhbnkgbmV3IGZpbGVzDQoJCQlmb3JlYWNoICgkc21kX3By b2dfYWNrIGFzICRmaWxlKSB7DQoJCQkJaWYgKGZpbGVfZXhpc3RzKCRmaWxlKSAmJiAkZmls ZSAhPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vtcykgew0KCQkJCQkkY29udGVudCA9IHNt ZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpOw0KCQkJCQkkb3V0W10gPSAkZmlsZS4n OiAoJy4oICgkaWdub3JlID09ICdJZ25vcmUnKSA/ICdOVUxMJyA6IG1kNSgkY29udGVudCkg KS4nKSc7DQoJCQkJfQ0KCQkJfQ0KCQkJJGZoID0gZm9wZW4oJHNtZF9wcm9nbm9zdGljc19j aGVja3N1bXMsICJ3Iik7DQoJCQlmd3JpdGUoJGZoLCBqb2luKG4sICRvdXQpKTsNCgkJCWZj bG9zZSgkZmgpOw0KCQkJc21kX3Byb2dub3N0aWNzX3NlbGZfaGFzaCgpOw0KCQkJJG1zZyA9 IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhY2tlZCcpOw0KCQl9DQoJfQ0KCWlmICgkY3NpICYm ICRzbWRfcHJvZ19hY2spIHsNCgkJICRtc2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3Np X3NlbnQnKTsNCgl9IGVsc2UgaWYgKCRjc2kpIHsNCgkJICRtc2cgPSBzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnbm9uZV9zZWxlY3RlZCcpOw0KCX0NCg0KCXBhZ2V0b3Aoc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljcycpLCAkbXNnKTsNCglleHRyYWN0KHNtZF9wcm9n bm9zdGljc19idXR0b25zKCkpOw0KDQoJbGlzdCgkbm9rLCAkbWlzcywgJGFkZGVkLCAkaGFz aGRvd24sICRoYXNobW9kKSA9IHNtZF9kb19wcm9nbm9zdGljcygxKTsNCgkkbm9rID0gaXNf YXJyYXkoJG5vaykgPyAkbm9rIDogYXJyYXkoKTsNCgkkbWlzcyA9IGlzX2FycmF5KCRtaXNz KSA/ICRtaXNzIDogYXJyYXkoKTsNCgkkYWRkZWQgPSBpc19hcnJheSgkYWRkZWQpID8gJGFk ZGVkIDogYXJyYXkoKTsNCgkkaGFzaG1vZCA9IGlzX2FycmF5KCRoYXNobW9kKSA/ICRoYXNo bW9kIDogYXJyYXkoKTsNCgkkZXJybnVtID0gY291bnQoYXJyYXlfbWVyZ2UoJG5vaywgJG1p c3MsICRhZGRlZCwgJGhhc2htb2QpKTsNCgkkZm9yZW5zaWNzID0gYXJyYXkoKTsNCgkkbGZv cm0gPSAnWS1tLWQgSDppOnMnOw0KDQoJZWNobyAkYnRuQ1NTLnN0YXJ0VGFibGUoJ2xpc3Qn KTsNCgllY2hvIHRyKHRkYShzdHJvbmcoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9hY2sn KSksICcgY29sc3Bhbj0iMyInKSAuIHRkYSgkYnRuU2V0dXAuJGJ0bkZpbGVzLiRidG5BZHZp Y2UsICRidG5TdHlsZSkgKTsNCgllY2hvICc8Zm9ybSBuYW1lPSJsb25nZm9ybSIgbWV0aG9k PSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7 c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJnNtZF9wcm9nbm9zdGljc19zdXBwcmVzcz0xIj4n Ow0KCWlmICgkZXJybnVtID4gMCkgew0KCQlmb3JlYWNoKCRoYXNobW9kIGFzICRuYXVnaHR5 KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJ ZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycs ICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdsYmxfaGFzaG1vZCcp KS50ZGEoJG5hdWdodHkpKTsNCgkJfQ0KCQlmb3JlYWNoKCRub2sgYXMgJG5hdWdodHkpIHsN CgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1Z2h0eSwgJHNtZF9wcm9nX2Fjayk7DQoJCQllY2hv IHRyKHRkKGNoZWNrYm94KCdzZWxlY3RlZFtdJywgJG5hdWdodHksICRzZWwpLCAnJywgJ211 bHRpLWVkaXQnKS50ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2xibF9jaGFuZ2VkJykpLnRk YSgkbmF1Z2h0eSkpOw0KCQkJaWYgKCRzZWwpIHsNCgkJCQkkZmkgPSBzdGF0KCRuYXVnaHR5 KTsNCgkJCQkkZm9yZW5zaWNzWydub2snXVtdID0gc21kX3Byb2dub3N0aWNzX2ZvcmVuc2lj X291dHB1dCgkbmF1Z2h0eSwgJGZpKTsNCgkJCQkkZm9yZW5zaWNzWydmaWxlcyddWyRuYXVn aHR5XSA9IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJG5h dWdodHkpKSk7DQoJCQl9DQoJCX0NCgkJZm9yZWFjaCgkbWlzcyBhcyAkbmF1Z2h0eSkgew0K CQkJJHNlbCA9IGluX2FycmF5KCRuYXVnaHR5LCAkc21kX3Byb2dfYWNrKTsNCgkJCWVjaG8g dHIodGQoY2hlY2tib3goJ3NlbGVjdGVkW10nLCAkbmF1Z2h0eSwgJHNlbCksICcnLCAnbXVs dGktZWRpdCcpLnRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbGJsX21pc3NpbmcnKSkudGRh KCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNlbCkgew0KCQkJCSRmb3JlbnNpY3NbJ21pc3MnXVtd ID0gJG5hdWdodHk7DQoJCQl9DQoJCX0NCgkJZm9yZWFjaCgkYWRkZWQgYXMgJG5hdWdodHkp IHsNCgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1Z2h0eSwgJHNtZF9wcm9nX2Fjayk7DQoJCQll Y2hvIHRyKHRkKGNoZWNrYm94KCdzZWxlY3RlZFtdJywgJG5hdWdodHksICRzZWwpLCAnJywg J211bHRpLWVkaXQnKS50ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2xibF9hZGRlZCcpKS50 ZGEoJG5hdWdodHkpKTsNCgkJCWlmICgkc2VsKSB7DQoJCQkJJGZpID0gc3RhdCgkbmF1Z2h0 eSk7DQoJCQkJJGZvcmVuc2ljc1snYWRkZWQnXVtdID0gc21kX3Byb2dub3N0aWNzX2ZvcmVu c2ljX291dHB1dCgkbmF1Z2h0eSwgJGZpKTsNCgkJCQkkZm9yZW5zaWNzWydmaWxlcyddWyRu YXVnaHR5XSA9IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMo JG5hdWdodHkpKSk7DQoJCQl9DQoJCX0NCgkJaWYgKCRzbWRfcHJvZ19hY2sgJiYgJHByZWZz Wydsb2dnaW5nJ10gIT0gJ25vbmUnKSB7DQoJCQkkZGV0ZWN0ID0gZXhwbG9kZSgnLCcsZ2V0 X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgdGltZSgpKSk7DQoJCQlpZiAo IWlzc2V0KCRkZXRlY3RbMV0pKSB7DQoJCQkJJGRldGVjdFsxXSA9ICRkZXRlY3RbMF07DQoJ CQl9DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJyonLCAndHhwX2xvZycsICJ0aW1lIEJFVFdFRU4g JyIgLiBkYXRlKCRsZm9ybSwgKCRkZXRlY3RbMF0gLSAkcHJlZnNbJ3NtZF9wcm9nbm9zdGlj c19jaGVja19mcmVxJ10pKSAuICInIEFORCAnIiAuIGRhdGUoJGxmb3JtLCAoJGRldGVjdFsx XSArIDUpKSAuICInIik7DQoJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJCSRmb3Jl bnNpY3NbJ3R4cF9sb2cnXVtdID0gam9pbignLCcsJHJvdyk7DQoJCQl9DQoJCX0NCgkJZWNo byB0cih0ZGEoDQoJCQkJc2VsZWN0X2J1dHRvbnMoKQ0KCQkJLCcgY2xhc3M9Im11bHRpLWVk aXQiIGNvbHNwYW49IjMiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiBub25l OyInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5BY2tJdC4kYnRuSWdub3JlLigoZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJycpKSA/ICRidG5DU0kgOiAnJyksICRi dG5TdHlsZSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGQoc21kX3Byb2dub3N0aWNzX2dU eHQoJ25vX2FsYXJtcycpKSk7DQoJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRl dGVjdCcsICcnLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsN Cgl9DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJaWYgKCRjc2kg JiYgJGZvcmVuc2ljcykgew0KCQkvLyBTZW5kIHRoZSBmb3JlbnNpY3Mgb2ZmDQoJCSR0byA9 IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKTsNCgkJaWYgKCR0 bykgew0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3ViamVjdF9jc2kn KTsNCgkJCSRoZHJzID0gc21kX3Byb2dub3N0aWNzX2hlYWRlcl9pbmZvKCdzbWRfZnJvZ25v c3RpY3MnKTsNCgkJCSRib2R5ID0NCgkJCQluLidUWFA6ICcgLiB0eHBfdmVyc2lvbiAubi4g J1BIUDogJyAuIHBocHZlcnNpb24oKSAubi4gJ015U1FMOiAnIC4gbXlzcWxfZ2V0X3NlcnZl cl9pbmZvKCkgLm4uICgoaXNfY2FsbGFibGUoJ2FwYWNoZV9nZXRfdmVyc2lvbicpKSA/ICdB cGFjaGU6ICcgLiBhcGFjaGVfZ2V0X3ZlcnNpb24oKS5uIDogJycpLg0KCQkJCSgoaXNzZXQo JGZvcmVuc2ljc1snbm9rJ10pKSA/IG4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxl X25vaycpLm4uam9pbihuLCRmb3JlbnNpY3NbJ25vayddKSA6ICcnKS4NCgkJCQkoKGlzc2V0 KCRmb3JlbnNpY3NbJ21pc3MnXSkpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVh bWJsZV9taXNzJykubi5qb2luKG4sJGZvcmVuc2ljc1snbWlzcyddKSA6ICcnKS4NCgkJCQko KGlzc2V0KCRmb3JlbnNpY3NbJ2FkZGVkJ10pKSA/IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4 dCgncHJlYW1ibGVfYWRkZWQnKS5uLmpvaW4obiwkZm9yZW5zaWNzWydhZGRlZCddKSA6ICcn KS4NCgkJCQkoKGlzc2V0KCRmb3JlbnNpY3NbJ3R4cF9sb2cnXSkpID8gbi5uLnNtZF9wcm9n bm9zdGljc19nVHh0KCdwcmVhbWJsZV90eHBsb2cnKS5uLmpvaW4obiwkZm9yZW5zaWNzWyd0 eHBfbG9nJ10pIDogbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdub19sb2dfZW50cmllcycp KTsNCgkJCWlmIChpc3NldCgkZm9yZW5zaWNzWydmaWxlcyddKSkgew0KCQkJCSRib2R5IC49 IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfZmlsZXMnKTsNCgkJCQlmb3Jl YWNoICgkZm9yZW5zaWNzWydmaWxlcyddIGFzICRmbiA9PiAkY29udGVudCkgew0KCQkJCQkk Ym9keSAuPSBuLm4uJGZuLm4ubi4kY29udGVudC5uOw0KCQkJCX0NCgkJCX0NCg0KCQkJbWFp bCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMnXSk7DQoJCX0NCgl9DQp9 DQoNCi8vIC0tLS0tLS0tLS0gRmlsZSBtYW5hZ2VtZW50DQpmdW5jdGlvbiBzbWRfcHJvZ25v c3RpY3NfZmlsZXMoJG1zZz0nJykgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50 LCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNh KGFycmF5KCdzdWJtaXQnKSkpKTsNCgkkc21kX3Byb2dub3N0aWNzX2ZpbGVzID0gZ3BzKCdz bWRfcHJvZ25vc3RpY3NfZmlsZXMnKTsNCglpZiAoIWlzX2FycmF5KCRzbWRfcHJvZ25vc3Rp Y3NfZmlsZXMpKSB7DQoJCSRzbWRfcHJvZ25vc3RpY3NfZmlsZXMgPSBhcnJheSgpOw0KCX0N Cg0KCSRhZGRzID0gKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2Zv cicpLCAnYWRkJykgIT09IGZhbHNlKTsNCgkkZmlsZWxpc3QgPSBzbWRfcHJvZ25vc3RpY3Nf cmVhZGZpbGVzKCk7DQoJJGFsbGNvdW50ID0gY291bnQoJGZpbGVsaXN0KTsNCg0KCWlmICgk c3VibWl0ID09ICdTYXZlJykgew0KCQkkb3V0ZmlsZSA9IGFycmF5KCk7DQoJCWZvcmVhY2gg KCRzbWRfcHJvZ25vc3RpY3NfZmlsZXMgYXMgJGZpbGUpIHsNCgkJCSRjb250ZW50ID0gc21k X3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkZmlsZSk7DQoJCQkkb3V0ZmlsZVtdID0gJGZpbGUu JzogKCcubWQ1KCRjb250ZW50KS4nKSc7DQoJCX0NCg0KCQkkZmggPSBmb3Blbigkc21kX3By b2dub3N0aWNzX2NoZWNrc3VtcywgInciKTsNCgkJZndyaXRlKCRmaCwgam9pbihuLCAkb3V0 ZmlsZSkpOw0KDQoJCWlmICgkYWRkcykgew0KCQkJJGFkZGl0aW9ucyA9IGFycmF5X2RpZmYo JGZpbGVsaXN0LCAkc21kX3Byb2dub3N0aWNzX2ZpbGVzKTsNCgkJCSRhZGRlZCA9IGFycmF5 KCk7DQoJCQlmb3JlYWNoICgkYWRkaXRpb25zIGFzICRhZGRpdGlvbikgew0KCQkJCSRhZGRl ZFtdID0gJGFkZGl0aW9uLic6IChOVUxMKSc7DQoJCQl9DQoJCQlmd3JpdGUoJGZoLCBuLmpv aW4obiwgJGFkZGVkKSk7DQoJCX0NCgkJZmNsb3NlKCRmaCk7DQoJCXNtZF9wcm9nbm9zdGlj c19zZWxmX2hhc2goKTsNCgkJc21kX2RvX3Byb2dub3N0aWNzKDIpOyAvLyBTaWxlbnRseSBh Y2tub3dsZWRnZSBhbGwgdGhlIGZpbGVzDQoJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bGFzdGRldGVjdCcsICcnLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5w dXQnKTsNCgkJJG1zZyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdmaWxlc191cGRhdGVkJyk7 DQoJfQ0KDQoJcGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNz JyksICRtc2cpOw0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCgkk c21kX3Byb2dub3N0aWNzX2ZpbGVzID0gYXJyYXkoKTsNCglpZiAoJGNzID0gQGZpbGUoJHNt ZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCWZvcmVhY2ggKCRjcyBhcyAkYykgew0K CQkJaWYgKHByZWdfbWF0Y2goJ0BeKFxTKyk6IFwoKC4qKVwpJEAnLCB0cmltKCRjKSwgJG0p KSB7DQoJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQlpZiAoJG1kNSAhPSAnTlVM TCcpIHsNCgkJCQkJJHNtZF9wcm9nbm9zdGljc19maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0K CQkJfQ0KCQl9DQoJfQ0KDQoJJG1vbmNvdW50ID0gY291bnQoJHNtZF9wcm9nbm9zdGljc19m aWxlcyk7DQoNCglpZiAoJGZpbGVsaXN0KSB7DQoJCSRmaWxleiA9IGFycmF5KCk7DQoJCWZv cmVhY2goJGZpbGVsaXN0IGFzICRrZXkgPT4gJHZhbCkgew0KCQkJJGZpbGV6WyR2YWxdID0g JGZpbGVsaXN0WyRrZXldOw0KCSAgIH0NCgkJJGZpbGVzZWwgPSBzbWRfcHJvZ25vc3RpY3Nf bXVsdGlzZWwoJ3NtZF9wcm9nbm9zdGljc19maWxlcycsICRmaWxleiwgJHNtZF9wcm9nbm9z dGljc19maWxlcyk7DQoJfQ0KCSRzaG93ZmlsZXMgPSAoaXNzZXQoJGZpbGVzZWwpICYmICRm aWxlc2VsKTsNCg0KCWVjaG8gJGJ0bkNTUy5zdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0 cih0ZGEoc3Ryb25nKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfZmlsZXMnKSkpIC4gdGRh KCRidG5TZXR1cC4kYnRuQWNrLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvIHRy KHRkY3Moc21kX3Byb2dub3N0aWNzX2dUeHQoJ2N1cnJtb24nLCBhcnJheSgne2N1cnJ9JyA9 PiAkbW9uY291bnQsICd7b3V0b2Z9JyA9PiAkYWxsY291bnQpKSAuKCgkc2hvd2ZpbGVzKSA/ IGJyLmJyLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbW9uZmlsZXNfZXhwbGFpbicpIDogJycp LCAxLCA0MDApKTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50 PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19m aWxlcyI+JzsNCgllY2hvICgkc2hvd2ZpbGVzKSA/IHRyKHRkYSgkZmlsZXNlbCkpIDogdHIo dGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdub19maWxlcycpKSk7DQoJZWNobyB0cih0ZGEo ZklucHV0KCdoaWRkZW4nLCAnc21kX3Byb2dub3N0aWNzX3N1cHByZXNzJywgMSkuJGJ0blNh dmUsICRidG5TdHlsZSkpOw0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFibGUoKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLSBTZXR1cCAvIHByZWZzDQpmdW5jdGlvbiBzbWRfcHJvZ25v c3RpY3Nfc2V0dXAoJG1zZz0nJykgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50 LCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgJHByZWZzOw0KDQoJJG9yaWdsb2MgPSBn ZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMu Jy4uJy5EUykuRFMsIDEpOw0KCSRvcmlnZXhjID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19leGNsdWRpcicsICdpbWFnZXMsIGZpbGVzLCB0bXAnLCAxKTsNCgkkb3JpZ2RpciA9IHJ0 cmltKGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfZGlyJywgcmVhbHBhdGgodHhwYXRoKSwg MSksIERTKTsNCgkkb3JpZ3BmeCA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcHJlZml4 JywgJycsIDEpOw0KDQoJJHByZWZsaXN0ID0gYXJyYXkoDQoJCSdzbWRfcHJvZ25vc3RpY3Nf Y2hlY2tfZnJlcScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywNCgkJJ3NtZF9w cm9nbm9zdGljc19hbGFybV9mcmVxJywNCgkJJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVy ZScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywNCgkJJ3NtZF9wcm9nbm9zdGljc19t YWlsdG9fY3NpJywNCgkJJ3NtZF9wcm9nbm9zdGljc191c2VycycsDQoJCSdzbWRfcHJvZ25v c3RpY3NfZGlyJywNCgkJJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgnLA0KCQknc21kX3Byb2du b3N0aWNzX2xpc3Rsb2MnLA0KCQknc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyJywNCgkJJ3Nt ZF9wcm9nbm9zdGljc19pZ25vcmVzJywNCgkJJ3NtZF9wcm9nbm9zdGljc190eHBkaXInLA0K CSk7DQoJJHdhcm5sb2MgPSAnJzsNCgkkbm90aWZ5ID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3Nf bm90aWZ5X3ZpYScpOw0KCSRjaGZvciA9IGdwcygnc21kX3Byb2dub3N0aWNzX2NoZWNrX2Zv cicpOw0KCSRyZXFzID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnKTsNCgkk c3FsaW4gPSBncHMoJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0Jyk7DQoJJHR3ZWVuID0g Z3BzKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbicpOw0KCSRydGZvciA9IGdwcygn c21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljcycpOw0KDQoJLy8gT25seSBvbmUgb2YgdGhl c2UgdmFsaWQgc3RhdHVzIGNvZGVzIGlzIGFsbG93ZWQgdG8gYmUgdGhyb3duDQoJJHRocm93 X2NvZGVzID0gYXJyYXkoDQoJCSdzbWRfbm8nID0+IGdUeHQoJ25vJyksDQoJCSdzbWRfYmxv Y2snID0+IHNtZF9wcm9nbm9zdGljc19nVHh0KCdibG9jaycpLA0KCQknMjAwJyA9PiAnMjAw IE9LJywNCgkJJzMwMScgPT4gJzMwMSBNb3ZlZCBQZXJtYW5lbnRseScsDQoJCSczMDInID0+ ICczMDIgRm91bmQnLA0KCQknMzA3JyA9PiAnMzA3IFRlbXBvcmFyeSBSZWRpcmVjdCcsDQoJ CSc0MDEnID0+ICc0MDEgVW5hdXRob3JpemVkJywNCgkJJzQwMycgPT4gJzQwMyBGb3JiaWRk ZW4nLA0KCQknNDA0JyA9PiAnNDA0IE5vdCBGb3VuZCcsDQoJCSc0MTAnID0+ICc0MTAgR29u ZScsDQoJCSc0MTQnID0+ICc0MTQgUmVxdWVzdC1VUkkgVG9vIExvbmcnLA0KCQknNTAwJyA9 PiAnNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicsDQoJCSc1MDEnID0+ICc1MDEgTm90IElt cGxlbWVudGVkJywNCgkpOw0KDQoJaWYgKCFpbl9hcnJheSgkdGhyb3dbMF0sICR0aHJvd19j b2RlcykgKSB7DQoJCSR0aHJvd1swXSA9ICc0MDAnOw0KCX0NCg0KCWZvcmVhY2ggKCR0d2Vl biBhcyAkaWR4ID0+ICR2YWwpIHsNCgkJaWYgKGVtcHR5KCR2YWwpKSB7DQoJCQkkdHdlZW5b JGlkeF0gPSAoJGlkeD09MCkgPyAnMDA6MDAnIDogJzIzOjU5JzsNCgkJfSBlbHNlIHsNCgkJ CSR0aW1lcGFydHMgPSBkb19saXN0KCR2YWwsICc6Jyk7DQoJCQlmb3JlYWNoICgkdGltZXBh cnRzIGFzICRudW0pIHsNCgkJCQlpZiAoIWlzX251bWVyaWMoJG51bSkpIHsNCgkJCQkJJHR3 ZWVuWyRpZHhdID0gKCRpZHg9PTApID8gJzAwOjAwJyA6ICcyMzo1OSc7DQoJCQkJCWJyZWFr Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCSRzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3Zp YSA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5KCRub3RpZnkpKSA/ICRub3RpZnkgOiBhcnJheSgk bm90aWZ5KSkpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yID0gam9pbignfCcsICgo aXNfYXJyYXkoJGNoZm9yKSkgPyAkY2hmb3IgOiBhcnJheSgkY2hmb3IpKSk7DQoJJHNtZF9w cm9nbm9zdGljc19yZXFfaGVhZGVycyA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5KCRyZXFzKSkg PyAkcmVxcyA6IGFycmF5KCRyZXFzKSkpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVj dCA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5KCRzcWxpbikpID8gJHNxbGluIDogYXJyYXkoJHNx bGluKSkpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbiA9IGpvaW4oJ3wnLCAo KGlzX2FycmF5KCR0d2VlbikpID8gJHR3ZWVuIDogYXJyYXkoJHR3ZWVuKSkpOw0KCSRzbWRf cHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzID0gam9pbignfCcsICgoaXNfYXJyYXkoJHJ0Zm9y KSkgPyAkcnRmb3IgOiBhcnJheSgkcnRmb3IpKSk7DQoNCgkvLyBHcmFiIHRoZSBzYXZlZCBw cmVmIHZhbHVlcyBhbmQgdGFjayBvbiB0aGUgYXJyYXkgaXRlbShzKQ0KCWV4dHJhY3QoZG9T bGFzaChncHNhKGFycmF5X21lcmdlKGFycmF5KCdzdWJtaXQnKSwgJHByZWZsaXN0KSkpKTsN CgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYSc7DQoJJHByZWZs aXN0W10gPSAnc21kX3Byb2dub3N0aWNzX2NoZWNrX2Zvcic7DQoJJHByZWZsaXN0W10gPSAn c21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzJzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJv Z25vc3RpY3Nfc3FsX2luamVjdCc7DQoJJHByZWZsaXN0W10gPSAnc21kX3Byb2dub3N0aWNz X2NoZWNrX2JldHdlZW4nOw0KCSRwcmVmbGlzdFtdID0gJ3NtZF9wcm9nbm9zdGljc19ydF9m b3JlbnNpY3MnOw0KCSRzbWRfcHJvZ25vc3RpY3NfZGlyID0gcnRyaW0oJHNtZF9wcm9nbm9z dGljc19kaXIsIERTKTsNCg0KCWlmICgkc3VibWl0ID09ICdTYXZlJykgew0KCQlpZiAoKCRz bWRfcHJvZ25vc3RpY3NfZGlyICE9ICRvcmlnZGlyKSB8fCAoJHNtZF9wcm9nbm9zdGljc19w cmVmaXggIT0gJG9yaWdwZngpKSB7DQoJCQlpZiAoaXNfZGlyKCRzbWRfcHJvZ25vc3RpY3Nf ZGlyKSAmJiBpc193cml0YWJsZSgkc21kX3Byb2dub3N0aWNzX2RpcikpIHsNCgkJCQkvLyBF dmVyeXRoaW5nIE9LIHNvIGRvIG5vdGhpbmcgZm9yIG5vdw0KCQkJfSBlbHNlIHsNCgkJCQkv LyBJZ25vcmUgbmV3IGRpciBhbmQgcmVzZXQgaXQgdG8gd2hhdCBpdCB3YXMgYmVmb3JlDQoJ CQkJJG1zZyA9IGFycmF5KHNtZF9wcm9nbm9zdGljc19nVHh0KCdub3Rfd3JpdGFibGUnLCBh cnJheSgne2xvY2F0aW9ufScgPT4gJHNtZF9wcm9nbm9zdGljc19kaXIpKSwgRV9XQVJOSU5H KTsNCgkJCQkkc21kX3Byb2dub3N0aWNzX2RpciA9ICRvcmlnZGlyOw0KCQkJfQ0KDQoJCQkv LyBSb29tIGZvciBtb3JlIGNvbmZpZyBmaWxlcyBhcyBhbmQgd2hlbiB0aGV5IGFyZSByZXF1 aXJlZA0KCQkJJGZpbGVsaXN0W10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCg0K CQkJZm9yZWFjaCAoJGZpbGVsaXN0IGFzICRmaWxlKSB7DQoJCQkJJGZpbGVuYW1lID0gJHNt ZF9wcm9nbm9zdGljc19wcmVmaXgubHRyaW0oYmFzZW5hbWUoJGZpbGUpLCAkb3JpZ3BmeCk7 DQoJCQkJcmVuYW1lKCRmaWxlLCBydHJpbSgkc21kX3Byb2dub3N0aWNzX2RpciwgRFMpLkRT LiRmaWxlbmFtZSk7DQoJCQl9DQoJCX0NCg0KCQkvLyBXcml0ZSBhbGwgdGhlIHByZWZzDQoJ CWZvcmVhY2ggKCRwcmVmbGlzdCBhcyAkcHJlZnZhbCkgew0KCQkJc2V0X3ByZWYoZG9TbGFz aCgkcHJlZnZhbCksIGRvU2xhc2goJCRwcmVmdmFsKSwgJ3NtZF9wcm9nbm9zJywgUFJFRl9I SURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCX0NCgkJaWYgKCAoJHNtZF9wcm9nbm9zdGljc19s aXN0bG9jICE9ICRvcmlnbG9jKSB8fCAoJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciAhPSAk b3JpZ2V4YykgKSB7DQoJCQkkbXNnID0gYXJyYXkoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3dh cm5fbG9jJyksIEVfV0FSTklORyk7DQoJCX0NCgkJaWYgKCEkbXNnKSB7DQoJCQkkbXNnID0g Z1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsNCgkJfQ0KCX0NCg0KCXBhZ2V0b3Aoc21kX3By b2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljcycpLCAkbXNnKTsNCg0KCSRzbWRfcHJv Z25vc3RpY3NfZGlyID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19kaXInLCB0eHBhdGgs IDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfcHJlZml4ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9z dGljc19wcmVmaXgnLCAnJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja19mb3IgPSBn ZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcicsICdkZWxldGV8bW9kaWZ5Jywg MSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja193aGVyZSA9IGdldF9wcmVmKCdzbWRfcHJv Z25vc3RpY3NfY2hlY2tfd2hlcmUnLCAnYWRtaW4nLCAxKTsNCgkkc21kX3Byb2dub3N0aWNz X2NoZWNrX2ZyZXEgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAx MCwgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuID0gZ2V0X3ByZWYoJ3Nt ZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuJywgJzAwOjAwfDIzOjU5JywgMSk7DQoJJHNt ZF9wcm9nbm9zdGljc19jaGVja19xdHkgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2No ZWNrX3F0eScsICczMCcsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcSA9IGdl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScsIDg2NDAwLCAxKTsNCgkkc21k X3Byb2dub3N0aWNzX25vdGlmeV92aWEgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX25v dGlmeV92aWEnLCAnJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19tYWlsdG8gPSBnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX21haWx0bycsICcnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNz X21haWx0b19jc2kgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21haWx0b19jc2knLCAn JywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc191c2VycyA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfdXNlcnMnLCAnJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19saXN0bG9jID0gZ2V0 X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19saXN0bG9jJywgcmVhbHBhdGgodHhwYXRoLkRTLicu LicuRFMpLkRTLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyID0gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19leGNsdWRpcicsICdpbWFnZXMsIGZpbGVzLCB0bXAnLCAxKTsN Cgkkc21kX3Byb2dub3N0aWNzX2lnbm9yZXMgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2lnbm9yZXMnLCAnZXJyb3JfbG9nJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19yZXFfaGVh ZGVycyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnLCAnVFJBQ0V8 UFVUfERFTEVURScsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCcsICcwfCcsIDEpOw0KCSRzbWRfcHJv Z25vc3RpY3NfcnRfZm9yZW5zaWNzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19ydF9m b3JlbnNpY3MnLCAnMXwxJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc190eHBkaXIgPSBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX3R4cGRpcicsIGh1LnNtZF9wcm9nbm9zdGljc19ndWVz c19hZG1pbl9kaXIoKSwgMSk7DQoNCglleHRyYWN0KHNtZF9wcm9nbm9zdGljc19idXR0b25z KCkpOw0KDQoJJGFkZHMgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yLCAn YWRkJykgIT09IGZhbHNlKTsNCgkkZGVscyA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19j aGVja19mb3IsICdkZWxldGUnKSAhPT0gZmFsc2UpOw0KCSRtb2RzID0gKHN0cnBvcygkc21k X3Byb2dub3N0aWNzX2NoZWNrX2ZvciwgJ21vZGlmeScpICE9PSBmYWxzZSk7DQoJJHJoX3Ry YWNlID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzLCAnVFJBQ0UnKSAh PT0gZmFsc2UpOw0KCSRyaF9wdXQgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcmVxX2hl YWRlcnMsICdQVVQnKSAhPT0gZmFsc2UpOw0KCSRyaF9kZWwgPSAoc3RycG9zKCRzbWRfcHJv Z25vc3RpY3NfcmVxX2hlYWRlcnMsICdERUxFVEUnKSAhPT0gZmFsc2UpOw0KCSRydF9oZHIg PSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzLCAnaGRyJykgIT09IGZh bHNlKTsNCgkkcnRfc3FsID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2lj cywgJ3NxbCcpICE9PSBmYWxzZSk7DQoJJHR3ZWVucyA9IGRvX2xpc3QoJHNtZF9wcm9nbm9z dGljc19jaGVja19iZXR3ZWVuLCAnfCcpOw0KCSR0aHJvd3MgPSBkb19saXN0KCRzbWRfcHJv Z25vc3RpY3Nfc3FsX2luamVjdCwgJ3wnKTsNCgkkaGVscExpbmsgPSAiP2V2ZW50PXBsdWdp biZzdGVwPXBsdWdpbl9oZWxwJm5hbWU9JHNtZF9wcm9nbm9zdGljc19ldmVudCNzbWRfc2V0 dXAiOw0KDQoJZWNobyAkYnRuQ1NTLnN0YXJ0VGFibGUoJ2xpc3QnLCAnJywgJ3NtZF9wcm9n bm9zdGljc19zZXR1cCcpOw0KCWVjaG8gdHIodGRjcyhzdHJvbmcoc21kX3Byb2dub3N0aWNz X2dUeHQoJ3R0bF9zZXR1cCcpKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnaGVscF9saW5r JywgYXJyYXkoJ3tsaW5rfScgPT4gJGhlbHBMaW5rKSksIDIpIC4gdGRhKCRidG5GaWxlcy4k YnRuQWNrLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtz dGVwPXNtZF9wcm9nbm9zdGljc19zZXR1cCI+JzsNCgllY2hvIHRyKHRkY3MoaGVkKHNtZF9w cm9nbm9zdGljc19nVHh0KCd0dGxfbW9ub3B0cycpLCAzKSAsMikpOw0KCWVjaG8gdHIoDQoJ CXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfd2hlcmUnKSwgJyBjbGFzcz0ic21k X2xhYmVsIicpLg0KCQl0ZGEocmFkaW9TZXQoDQoJCQlhcnJheSgNCgkJCQknYWRtaW4nID0+ IGdUeHQoJ25vJyksDQoJCQkJJ2FkbWlufHB1YmxpYycgPT4gZ1R4dCgneWVzJykNCgkJCSks ICdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUnLCAkc21kX3Byb2dub3N0aWNzX2NoZWNr X3doZXJlKSwgJyBpZD0ic21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlIicpDQoJKTsNCgll Y2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoZWNrX2ZyZXEnKSwgJyBj bGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9z dGljc19jaGVja19mcmVxJywgJHNtZF9wcm9nbm9zdGljc19jaGVja19mcmVxLCAnJywnJywn JywxNSkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NlY29uZHMnKSkNCgkpOw0KCWVjaG8g dHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfYmV0d2VlbicpLCAnIGNs YXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYSgNCgkJCWZJbnB1dCgndGV4dCcsICdzbWRfcHJv Z25vc3RpY3NfY2hlY2tfYmV0d2VlbltdJywgJHR3ZWVuc1swXSwgJycsJycsJycsMTUpLg0K CQkJc21kX3Byb2dub3N0aWNzX2dUeHQoJ2FuZCcpLg0KCQkJZklucHV0KCd0ZXh0JywgJ3Nt ZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuW10nLCAkdHdlZW5zWzFdLCAnJywnJywnJywx NSkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2htcycpDQoJCSkNCgkpOw0KCWVjaG8gdHIo DQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfcXR5JyksICcgY2xhc3M9InNt ZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfY2hl Y2tfcXR5JywgJHNtZF9wcm9nbm9zdGljc19jaGVja19xdHksICcnLCcnLCcnLDE1KSkNCgkp Ow0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWxhcm1fZnJlcScp LCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3By b2dub3N0aWNzX2FsYXJtX2ZyZXEnLCAkc21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEsICcn LCcnLCcnLDE1KS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc2Vjb25kcycpKQ0KCSk7DQoJ ZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdub3RpZnlfdmlhJyksICcg Y2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKA0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9z dGljc19ub3RpZnlfdmlhW10nLCAndHhwJywgc3RycG9zKCRzbWRfcHJvZ25vc3RpY3Nfbm90 aWZ5X3ZpYSwgJ3R4cCcpICE9PSBmYWxzZSkgLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9z dGljc19nVHh0KCdub3RpZnlfdHhwJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94KCdzbWRf cHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYVtdJywgJ2VtYWlsJywgc3RycG9zKCRzbWRfcHJvZ25v c3RpY3Nfbm90aWZ5X3ZpYSwgJ2VtYWlsJykgIT09IGZhbHNlKS4NCgkJCSc8bGFiZWw+Jy5z bWRfcHJvZ25vc3RpY3NfZ1R4dCgnbm90aWZ5X2VtYWlsJykuJzwvbGFiZWw+Jw0KCQkpDQoJ KTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ21haWx0bycpLCAn IGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2du b3N0aWNzX21haWx0bycsICRzbWRfcHJvZ25vc3RpY3NfbWFpbHRvLCAnJywnJywnJyw2MCku c3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRh KHNtZF9wcm9nbm9zdGljc19nVHh0KCdtYWlsdG9fY3NpJyksICcgY2xhc3M9InNtZF9sYWJl bCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2Nz aScsICRzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaSwgJycsJycsJycsNjApLnNwLnNtZF9w cm9nbm9zdGljc19nVHh0KCdjc3YnKSkNCgkpOw0KCWVjaG8gdHIodGRjcyhoZWQoc21kX3By b2dub3N0aWNzX2dUeHQoJ3R0bF9yZWFsb3B0cycpLCAzKSwgMikpOw0KCWVjaG8gdHIoDQoJ CXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmVxX2hlYWRlcnMnKSwgJyBjbGFzcz0ic21k X2xhYmVsIicpLg0KCQl0ZGEoDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX3JlcV9o ZWFkZXJzW10nLCAnVFJBQ0UnLCAkcmhfdHJhY2UpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9n bm9zdGljc19nVHh0KCdyaF90cmFjZScpLic8L2xhYmVsPicuDQoJCQljaGVja2JveCgnc21k X3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzW10nLCAnUFVUJywgJHJoX3B1dCkuDQoJCQknPGxh YmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JoX3B1dCcpLic8L2xhYmVsPicuDQoJCQlj aGVja2JveCgnc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzW10nLCAnREVMRVRFJywgJHJo X2RlbCkuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JoX2RlbCcpLic8 L2xhYmVsPicNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19n VHh0KCdzcWxfaW5qZWN0JyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKA0KCQkJ c2VsZWN0SW5wdXQoJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0W10nLCAkdGhyb3dfY29k ZXMsICR0aHJvd3NbMF0sIDApLg0KCQkJc21kX3Byb2dub3N0aWNzX2dUeHQoJ3dpdGgnKS4N CgkJCWZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdFtdJywgJHRo cm93c1sxXSwgJycsJycsJycsNjApDQoJCSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc2VuZF9mb3JlbnNpY3MnKSwgJyBjbGFzcz0ic21kX2xhYmVs IicpLg0KCQl0ZGEoDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2lj c1tdJywgJ2hkcicsICRydF9oZHIpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19n VHh0KCdydF9oZHInKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGlj c19ydF9mb3JlbnNpY3NbXScsICdzcWwnLCAkcnRfc3FsKS4NCgkJCSc8bGFiZWw+Jy5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgncnRfc3FsJykuJzwvbGFiZWw+Jw0KCQkpDQoJKTsNCgllY2hv IHRyKHRkY3MoaGVkKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfZmlsZW9wdHMnKSwgMyks IDIpKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoZWNrX2Zv cicpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYSgNCgkJCWNoZWNrYm94KCdzbWRf cHJvZ25vc3RpY3NfY2hlY2tfZm9yW10nLCAnYWRkJywgJGFkZHMpIC4NCgkJCSc8bGFiZWw+ Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hfYWRkJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNr Ym94KCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yW10nLCAnZGVsZXRlJywgJGRlbHMpLg0K CQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdjaF9kZWwnKS4nPC9sYWJlbD4n Lg0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19jaGVja19mb3JbXScsICdtb2RpZnkn LCAkbW9kcykuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoX21vZCcp Lic8L2xhYmVsPicNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGlj c19nVHh0KCdsaXN0bG9jJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1 dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycsICRzbWRfcHJvZ25vc3RpY3Nf bGlzdGxvYywgJycsJycsJycsNjApLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdjc3YnKSkN CgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnZXhjbHVkaXIn KSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9w cm9nbm9zdGljc19leGNsdWRpcicsICRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICcnLCcn LCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpDQoJKTsNCgllY2hvIHRy KA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2lnbm9yZXMnKSwgJyBjbGFzcz0ic21k X2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19pZ25v cmVzJywgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzLCAnJywnJywnJyw2MCkuc3Auc21kX3By b2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cih0ZGNzKGhlZChzbWRfcHJv Z25vc3RpY3NfZ1R4dCgndHRsX3BsdWdvcHRzJyksIDMpLCAyKSk7DQoJZWNobyB0cigNCgkJ dGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdhdXRoX3VzZXJzJyksICcgY2xhc3M9InNtZF9s YWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfdXNlcnMn LCAkc21kX3Byb2dub3N0aWNzX3VzZXJzLCAnJywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0 aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGlj c19nVHh0KCd0eHBkaXInKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0 KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc190eHBkaXInLCAkc21kX3Byb2dub3N0aWNzX3R4 cGRpciwgJycsJycsJycsNjApKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9z dGljc19nVHh0KCdwcm9nbG9jJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJ bnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfZGlyJywgJHNtZF9wcm9nbm9zdGljc19k aXIsICcnLCcnLCcnLDYwKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgncHJvZ3BmeCcpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5w dXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX3ByZWZpeCcsICRzbWRfcHJvZ25vc3RpY3Nf cHJlZml4LCAnJywnJywnJyw2MCkpDQoJKTsNCgllY2hvIHRyKHRkYSgkYnRuU2F2ZSwgJGJ0 blN0eWxlKSk7DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQov LyAtLS0tLS0tLS0tICBTZWN1cml0eSBhZHZpY2UNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGlj c19hZHZpY2UoJG1zZz0nJykgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAk c21kX3Byb2dub3N0aWNzX3N0eWxlLCAkcHJlZnM7DQoJcmVxdWlyZV9vbmNlIHR4cGF0aC4n L2xpYi9JWFJDbGFzcy5waHAnOw0KDQoJcGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn c21kX3Byb2dub3N0aWNzJyksICRtc2cpOw0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1 dHRvbnMoKSk7DQoNCgkkY2hlY2tzID0gYXJyYXkoKTsNCg0KCS8vIFByb2dub3N0aWNzIGRp ciBpbiBkb2Nyb290Pw0KCWlmIChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19k aXInLCB0eHBhdGgpLCAkcHJlZnNbJ3BhdGhfdG9fc2l0ZSddKSAhPT0gZmFsc2UpIHsNCgkJ JGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2RvY3Jvb3RfcHJvZ25vc3RpY3Mn KTsNCgl9DQoNCgkvLyBTZXR1cCBzdGlsbCBleGlzdHM/DQoJaWYgKEBpc19kaXIodHhwYXRo IC4gRFMuICdzZXR1cCcpKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGljc19nVHh0 KCdzZXR1cF9leGlzdHMnKTsNCgl9DQoNCgkvLyBSUEMgc3RpbGwgZXhpc3RzPw0KCWlmIChA aXNfZGlyKHJlYWxwYXRoKHR4cGF0aC5EUy4nLi4nLkRTLiAncnBjJykpICYmICRwcmVmc1sn ZW5hYmxlX3htbHJwY19zZXJ2ZXInXSA9PSAwKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9n bm9zdGljc19nVHh0KCdycGNfZXhpc3RzJyk7DQoJfQ0KDQoJLy8gTmV3IFRYUCB2ZXJzaW9u L2JyYW5jaCBhdmFpbGFibGU/IEFkYXB0ZWQgZnJvbSB0eHBsaWJfdXBkYXRlLnBocA0KCSRj bGllbnQgPSBuZXcgSVhSX0NsaWVudCgnaHR0cDovL3JwYy50ZXh0cGF0dGVybi5jb20nKTsN CgkkdWlkID0gZ2V0X3ByZWYoJ2Jsb2dfdWlkJywgbWQ1KHVuaXFpZChtdF9yYW5kKCksdHJ1 ZSkpKTsNCglpZiAoJGNsaWVudC0+cXVlcnkoJ3R1cHMuZ2V0VFhQVmVyc2lvbicsJHVpZCkp IHsNCgkJJHJlc3BvbnNlID0gJGNsaWVudC0+Z2V0UmVzcG9uc2UoKTsNCg0KCQlpZiAoaXNf YXJyYXkoJHJlc3BvbnNlKSkgew0KCQkJa3NvcnQoJHJlc3BvbnNlKTsNCgkJCSR2ZXJzaW9u ID0gZ2V0X3ByZWYoJ3ZlcnNpb24nLCAnJyk7DQoJCQkkbHZlcnNpb24gPSBleHBsb2RlKCcu JywkdmVyc2lvbik7DQoJCQkkYnJhbmNoID0gc3Vic3RyKCR2ZXJzaW9uLDAsMyk7DQoNCgkJ CWZvcmVhY2ggKCRyZXNwb25zZSBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCQkkcnZlcnNpb24g PSBleHBsb2RlKCcuJywkdmFsKTsNCgkJCQlpZiAoJGtleSA9PSAndHhwX2N1cnJlbnRfdmVy c2lvbl8nLiRicmFuY2gpIHsNCgkJCQkJaWYgKGlzc2V0KCRsdmVyc2lvblsyXSkgJiYgaXNz ZXQoJHJ2ZXJzaW9uWzJdKSAmJiAoaW50dmFsKCRydmVyc2lvblsyXSk+aW50dmFsKCRsdmVy c2lvblsyXSkpKSB7DQoJCQkJCQkkbW9zdF9yZWNlbnQgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnYXZhaWxfYnJhbmNoJykuJzogJy4kdmFsOw0KCQkJCQl9DQoJCQkJfSBlbHNlIHsNCgkJ CQkJaWYgKGludHZhbCgkcnZlcnNpb25bMF0pPmludHZhbCgkbHZlcnNpb25bMF0pIHx8IGlu dHZhbCgkcnZlcnNpb25bMV0pPmludHZhbCgkbHZlcnNpb25bMV0pKSB7DQoJCQkJCQkkbW9z dF9yZWNlbnQgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYXZhaWxfdHhwJykuJzogJy4kdmFs Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRtb3N0X3JlY2VudCkpIHsN CgkJCQkkY2hlY2tzW10gPSAkbW9zdF9yZWNlbnQ7DQoJCQl9DQoJCX0NCgl9DQoNCgkvLyBG aWxlcyBkaXIgaW4gZG9jcm9vdD8NCglpZiAoc3RycG9zKCRwcmVmc1snZmlsZV9iYXNlX3Bh dGgnXSwgJHByZWZzWydwYXRoX3RvX3NpdGUnXSkgIT09IGZhbHNlKSB7DQoJCSRjaGVja3Nb XSA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdkb2Nyb290X2ZpbGVzJyk7DQoJfQ0KDQoJLy8g VG1wIGRpciBpbiBkb2Nyb290Pw0KCWlmIChzdHJwb3MoJHByZWZzWyd0ZW1wZGlyJ10sICRw cmVmc1sncGF0aF90b19zaXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10gPSBzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnZG9jcm9vdF90bXAnKTsNCgl9DQoNCi8qDQoJLy8gVE9ETzog Y2hlY2sgd2hhdCBTSE9XIEdSQU5UUyByZXR1cm5zIGFuZCBkZXRlcm1pbmUgaWYgaXQgY291 bGQgYmUgYSBzZWN1cml0eSByaXNrDQoJJHJlcyA9IHNhZmVfcXVlcnkoJ1NIT1cgR1JBTlRT Jyk7DQoJaWYgKG51bVJvd3MoJHJlcykgPiAwKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9n bm9zdGljc19nVHh0KCdzaG93X2dyYW50cycpOw0KCX0NCiovDQoNCgkvLyBEb2VzIHRoaXMg TXlTUUwgdXNlciBoYXZlIEZJTEVTIHByaXZzPw0KCSRyYW5kZmlsZSA9ICRwcmVmc1sndGVt cGRpciddLkRTLnJhbmQoKS50aW1lKCkuJy5zcWwnOw0KCSRyZXMgPSBAc2FmZV9xdWVyeSgn U0VMRUNUIGlkIElOVE8gT1VURklMRSAiJy4kcmFuZGZpbGUuJyIgRklFTERTIFRFUk1JTkFU RUQgQlkgIlx0IiBMSU5FUyBURVJNSU5BVEVEIEJZICJcbiIgRlJPTSB0eHBfaW1hZ2UgV0hF UkUgMSBMSU1JVCAxJyk7DQoJaWYgKG15c3FsX2Vycm9yKCkgPT0gJycpIHsNCgkJJGNoZWNr c1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NxbF9maWxlX3ByaXZzJyk7DQoJCWlmIChp c19maWxlKCRyYW5kZmlsZSkpIHsNCgkJCUB1bmxpbmsoJHJhbmRmaWxlKTsNCgkJfQ0KCX0N Cg0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jy4kc21kX3Byb2dub3N0aWNzX3N0 eWxlWydhZHZpY2UnXS4kc21kX3Byb2dub3N0aWNzX3N0eWxlWydzZXR1cCddLic8L3N0eWxl Picuc3RhcnRUYWJsZSgnbGlzdCcsICcnLCAnc21kX3Byb2dfYWR2aWNlJyk7DQoJZWNobyB0 cih0ZGEoc3Ryb25nKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfYWR2aWNlJykpKSAuIHRk YSgkYnRuU2V0dXAuJGJ0bkZpbGVzLiRidG5BY2ssICRidG5TdHlsZSkgKTsNCglpZiAoJGNo ZWNrcykgew0KCQlmb3JlYWNoKCRjaGVja3MgYXMgJGNoZWNrKSB7DQoJCQllY2hvIHRyKHRk YSgkY2hlY2spKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9wcm9nbm9z dGljc19nVHh0KCd0aWdodCcpKSk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8g LS0tLS0tLS0tLSBIYXNoIHRoZSBoYXNoZmlsZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNz X3NlbGZfaGFzaCgpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXM7DQoN CglpZiAoZmlsZV9leGlzdHMoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCSRj b250ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkc21kX3Byb2dub3N0aWNzX2No ZWNrc3Vtcyk7DQoJCSRoYXNoID0gbWQ1KCRjb250ZW50KTsNCgl9IGVsc2Ugew0KCQkkaGFz aCA9IE5VTEw7DQoJfQ0KCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfc3VtaGFzaCcsICRo YXNoLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLSBDb21waWxlIGxpc3Qgb2YgZmlsZXMgdG8gbW9uaXRvcg0KZnVuY3Rp b24gc21kX3Byb2dub3N0aWNzX3JlYWRmaWxlcygpIHsNCgkkZmlsZWxpc3QgPSBhcnJheSgp Ow0KDQoJJHNtZF9wcm9nbm9zdGljc19saXN0bG9jID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9z dGljc19saXN0bG9jJywgJycpOw0KCSRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIgPSBkb19s aXN0KGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLCAnJykpOw0KCSRzbWRf cHJvZ25vc3RpY3NfaWdub3JlcyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3Jl cycsICcnKTsNCglpZiAoJHNtZF9wcm9nbm9zdGljc19saXN0bG9jKSB7DQoJCWZvcmVhY2gg KGRvX2xpc3QoJHNtZF9wcm9nbm9zdGljc19saXN0bG9jKSBhcyAkbG9jKSB7DQoJCQkvLyBO T1RFOiBub3QgdXNpbmcgR0xPQl9CUkFDRSB0byBncmFiIHJlZ3VsYXIgYW5kIGRvdCBmaWxl cywgc2luY2UgaXQncyBub3QgYWx3YXlzIGF2YWlsYWJsZSBjcm9zcy1PUw0KCQkJJGZpbGVs aXN0ID0gYXJyYXlfbWVyZ2UoJGZpbGVsaXN0LCBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoIioi LCBHTE9CX01BUkssICRsb2MsICRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICRzbWRfcHJv Z25vc3RpY3NfaWdub3JlcyksIHNtZF9wcm9nbm9zdGljc19yZ2xvYigiLioiLCBHTE9CX01B UkssICRsb2MsICRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICRzbWRfcHJvZ25vc3RpY3Nf aWdub3JlcykpOw0KCQl9DQoJfQ0KCXJldHVybiAkZmlsZWxpc3Q7DQp9DQoNCi8vIC0tLS0t LS0tLS0gUHJlcGFyZSBmaWxlIGNvbnRlbnRzIGZvciBtZDUuIEFzc3VtZXMgZmlsZSBleGlz dHMNCi8vIENoZWNrcyB0byBzZWUgaWYgbGFyZ2UgZmlsZXMgYXJlIGJpbmFyeSBiZWZvcmUg d2FzdGluZyB0aW1lIHN0cmlwcGluZyBuZXdsaW5lcyBhbmQgc3R1ZmYNCmZ1bmN0aW9uIHNt ZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpIHsNCgkkY29udGVudCA9IGZpbGVfZ2V0 X2NvbnRlbnRzKCRmaWxlKTsNCgkkc3RhdCA9IHN0YXQoJGZpbGUpOw0KCSRkb3N0cmlwID0g dHJ1ZTsNCgkvLyBQZXJmb3JtIHRoZSBzdHJpcCByZWdhcmRsZXNzIG9uIGZpbGVzIDwgMUti IGFzIGl0IGhhcyBsaXR0bGUgaW1wYWN0DQoJaWYgKCRzdGF0WydzaXplJ10gPiAxMDI0MDAw KSB7DQoJCSRwYXJ0ID0gc3Vic3RyKCRjb250ZW50LCAwLCAxNTM2MDAwKTsgLy8gRmlyc3Qg MS41S0INCgkJaWYgKHN0cnBvcygkcGFydCwgMHgwMCkgfHwgKHN0cnBvcygkcGFydCwgMHgw RCkgIT09IGZhbHNlKSB8fCAoc3RycG9zKCRwYXJ0LCAweDBBKSAhPT0gZmFsc2UpKSB7DQoJ CQkvLyBMaWtlbHkgYSBiaW5hcnkgZmlsZTogbGVhdmUgaXQgYmUNCgkJCSRkb3N0cmlwID0g ZmFsc2U7DQoJCX0NCgl9DQoJaWYgKCRkb3N0cmlwKSB7DQoJCSRjb250ZW50ID0gc3RydHIo ICRjb250ZW50LCBhcnJheSgiXHJcbiIgPT4gIlxuIiwgIlwkSGVhZFVSTDogaHR0cDoiID0+ ICJcJEhlYWRVUkw6IGh0dHBzOiIpICk7DQoJfQ0KCXJldHVybiAkY29udGVudDsNCn0NCg0K Ly8gRnJhbmtlbnN0ZWluZWQgZnJvbSBodHRwOi8vc25pcHBsci5jb20vdmlldy8xNjIzMy9y ZWN1cnNpdmUtZ2xvYi8NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19yZ2xvYigkcGF0dGVy biwgJGZsYWdzPTAsICRwYXRoPScnLCAkZXhjbD1hcnJheSgpLCAkaWduPScnKSB7DQoJZ2xv YmFsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KDQoJLy8gQWRkIGFueSBmaWxlcyB0 byBwZXJtYW5lbnRseSBleGNsdWRlIGhlcmUgKE5PVCBkaXJzOiB0aGV5J3JlIGlnbm9yZWQg YXV0b21hdGljYWxseSkNCgkkaWduYXJyID0gKCRpZ24pID8gZG9fbGlzdCgkaWduKSA6IGFy cmF5KCk7DQoNCgkvLyBFeHBhbmQgYW55IHdpbGRjYXJkIGZpbGVuYW1lcw0KCSRyZWdhcnIg PSBhcnJheSgpOw0KCWZvcmVhY2ggKCRpZ25hcnIgYXMgJGlkeCA9PiAkaXRlbSkgew0KCQlp ZiAoIChzdHJwb3MoJGl0ZW0sICcqJykgIT09IGZhbHNlKSB8fCAoc3RycG9zKCRpdGVtLCAn PycpICE9PSBmYWxzZSkgKSB7DQoJCQkkcmVnYXJyW10gPSBzdHJ0ciggcHJlZ19xdW90ZSgk aXRlbSksIGFycmF5KCJcKiIgPT4gIi4qIiwgIlw/IiA9PiAiLiIpICk7DQoJCQl1bnNldCgk aWduYXJyWyRpZHhdKTsgLy8gUmVtb3ZlIHRoZSB3aWxkY2FyZCBmaWxlbmFtZSBmcm9tIHRo ZSBpZ25vcmUgbGlzdA0KCQl9DQoJfQ0KCSRyZWdleGNsdWRlID0gKCRyZWdhcnIpID8gJy9e KCcgLiBqb2luKCd8JywgJHJlZ2FycikgLiAnKSQvJyA6ICcnOw0KCSRwZXJtZXhjbHVkZSA9 IGFycmF5X21lcmdlKGFycmF5KGJhc2VuYW1lKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1z KSksICRpZ25hcnIpOw0KDQoJaWYgKCEkcGF0aCAmJiAoJGRpciA9IGRpcm5hbWUoJHBhdHRl cm4pKSAhPSAnLicpIHsNCgkJaWYgKCRkaXIgPT0gJ1xcJyB8fCAkZGlyID09IERTKSAkZGly ID0gJyc7DQoJCXJldHVybiBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoYmFzZW5hbWUoJHBhdHRl cm4pLCAkZmxhZ3MsICRkaXIgLiBEUywgJGV4Y2wsICRpZ24pOw0KCX0NCgkkcGF0aHMgPSBn bG9iKCRwYXRoIC4gJyonLCBHTE9CX09OTFlESVIgfCBHTE9CX05PU09SVCk7DQoJJGZpbGVz ID0gZ2xvYigkcGF0aCAuICRwYXR0ZXJuLCAkZmxhZ3MpOw0KCWZvcmVhY2ggKCRwYXRocyBh cyAkcCkgew0KCQkkcGluZm8gPSBhcnJheV9wb3AoZXhwbG9kZShEUywgJHApKTsNCgkJaWYg KCFpbl9hcnJheSgkcGluZm8sICRleGNsKSkgew0KCQkJJGZpbGVzID0gYXJyYXlfbWVyZ2Uo JGZpbGVzLCBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoJHBhdHRlcm4sICRmbGFncywgJHAgLiBE UywgJGV4Y2wsICRpZ24pKTsNCgkJCWZvcmVhY2goJGZpbGVzIGFzICRpZHggPT4gJHRoZUZp bGUpIHsNCgkJCQkkZmV4ID0gYXJyYXlfcG9wKGV4cGxvZGUoRFMsICR0aGVGaWxlKSk7DQoJ CQkJJHJleCA9ICgkcmVnZXhjbHVkZSkgPyBwcmVnX21hdGNoKCRyZWdleGNsdWRlLCAkZmV4 KSA6IGZhbHNlOw0KCQkJCWlmKCRmZXg9PScnIHx8IGluX2FycmF5KCRmZXgsICRwZXJtZXhj bHVkZSkgfHwgJHJleCkgew0KCQkJCQl1bnNldCgkZmlsZXNbJGlkeF0pOw0KCQkJCX0NCgkJ CX0NCgkJfQ0KCX0NCglyZXR1cm4gJGZpbGVzOw0KfQ0KDQovLyBGb3JtYXQgZm9yZW5zaWMg ZGF0YSBmb3IgYSBmaWxlDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfZm9yZW5zaWNfb3V0 cHV0KCRmaWxlLCAkZmkpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJGRmb3JtID0gJHByZWZz WydkYXRlZm9ybWF0J107DQoJJHNlcCA9IG47DQoJJG91dCA9ICcnOw0KDQoJJG91dCAuPSAk c2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfbmFtZScpIC4gJGZpbGU7DQoJJG91 dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfc2l6ZScpIC4gJGZpWydz aXplJ107DQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfbW9k JykgLiBzdHJmdGltZSgkZGZvcm0sICRmaVsnbXRpbWUnXSk7DQoJJG91dCAuPSAkc2VwIC4g c21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfdWlkJykgLiAkZmlbJ3VpZCddOw0KCSRvdXQg Lj0gJHNlcCAuIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdGF0X2dpZCcpIC4gJGZpWydnaWQn XTsNCg0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tIERvZXMgd2hhdCBpdCBz YXlzIG9uIHRoZSB0aW4NCi8vIEFzc3VtZXMgJ3RleHRwYXR0ZXJuJyBpcyB0aGUgYWRtaW4t c2lkZSBkaXJlY3RvcnkgaWYgc2VydmVyIHZhciBub3Qgc2V0LiBNdXN0IGZpeCBpbiBjb3Jl IG9uZSBkYXkgd2l0aCB0cnVlIGNvbnN0YW50DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nf Z3Vlc3NfYWRtaW5fZGlyKCkgew0KCSRhZG1pbmRpciA9IHRyaW0oZGlybmFtZSgkX1NFUlZF UlsnUEhQX1NFTEYnXSksICcvXFwnKTsNCgkkYWRtaW5kaXIgPSAoZW1wdHkoJGFkbWluZGly KSkgPyAndGV4dHBhdHRlcm4nIDogJGFkbWluZGlyOw0KCXJldHVybiAkYWRtaW5kaXI7DQp9 DQoNCi8vIC0tLS0tLS0tLS0gR2V0IGNvbW1vbiBzZXJ2ZXIgaW5mbyBmb3IgbWFpbCBoZWFk ZXJzLCBldGMNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19oZWFkZXJfaW5mbygkZnJvbW5h bWUpIHsNCgkkZG9tYWlucGFydHMgPSBkb19saXN0KGRvU3RyaXAoc2VydmVyU2V0KCdTRVJW RVJfTkFNRScpKSwgJy4nKTsNCgkkbnVtcGFydHMgPSBjb3VudCgkZG9tYWlucGFydHMpOw0K CSRkb21haW4gPSAkZG9tYWlucGFydHNbJG51bXBhcnRzLTJdIC4gJy4nIC4gJGRvbWFpbnBh cnRzWyRudW1wYXJ0cy0xXTsNCgkkcmVwbHlfdG8gPSAnbm9yZXBseUAnLiRkb21haW47DQoJ JHR4cGRpciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfdHhwZGlyJywgaHUuc21kX3By b2dub3N0aWNzX2d1ZXNzX2FkbWluX2RpcigpKTsNCgkkc2VwID0gaXNfd2luZG93cygpID8g IlxyXG4iIDogIlxuIjsNCgkkaGVhZGVycyA9ICJGcm9tOiAkZnJvbW5hbWUgPCRyZXBseV90 bz4iLg0KCQkkc2VwLidSZXBseS1UbzogJy4kcmVwbHlfdG8uDQoJCSRzZXAuJ1gtTWFpbGVy OiBUZXh0cGF0dGVybicuDQoJCSRzZXAuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhi aXQnLg0KCQkkc2VwLidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04 IicuDQoJCSRzZXA7DQoNCgkkb3V0ID0gYXJyYXkoDQoJCSdkb21haW4nID0+ICRkb21haW4s DQoJCSdyZXBseV90bycgPT4gJHJlcGx5X3RvLA0KCQkndHhwZGlyJyA9PiAkdHhwZGlyLA0K CQknc2VwJyA9PiAkc2VwLA0KCQknaGVhZGVycycgPT4gJGhlYWRlcnMsDQoJKTsNCg0KCXJl dHVybiAkb3V0Ow0KfQ0KDQovLyBDb21tb24gYnV0dG9ucw0KZnVuY3Rpb24gc21kX3Byb2du b3N0aWNzX2J1dHRvbnMoKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRz bWRfcHJvZ25vc3RpY3Nfc3R5bGU7DQoNCgkkcmV0ID0gYXJyYXkgKA0KCQknYnRuU2F2ZScg PT4gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcp LA0KCQknYnRuQWNrJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0n LiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNr JiMzODtzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3M9MSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdz dWJtaXQnLCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG5sX2FjaycpLCAnc21hbGxlcmJveCcp Lic8L2Zvcm0+JywNCgkJJ2J0bkFja0l0JyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQn LCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG5sX2Fja2l0JyksICdwdWJsaXNoJyksDQoJCSdi dG5JZ25vcmUnID0+IGZJbnB1dCgnc3VibWl0JywgJ2lnbm9yZScsIHNtZF9wcm9nbm9zdGlj c19nVHh0KCdwbmxfaWdub3JlJyksICdwdWJsaXNoJyksDQoJCSdidG5DU0knID0+IGZJbnB1 dCgnc3VibWl0JywgJ2NzaScsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfY3NpJyksICdw dWJsaXNoJyksDQoJCSdidG5BZHZpY2UnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlv bj0iP2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9n bm9zdGljc19hZHZpY2UiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3Byb2du b3N0aWNzX2dUeHQoJ3BubF9hZHZpY2UnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJ CSdidG5GaWxlcycgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4k c21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2ZpbGVz Ij4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdw bmxfZmlsZXMnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TZXR1cCcgPT4g Jzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNz X2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nLmZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfc2V0dXAnKSwgJ3Nt YWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TdHlsZScgPT4gJyBjbGFzcz0ic21kX3By b2dfYnRucyIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4OyInLA0KCQknYnRuQ1NTJyA9 PiAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ3Nl dHVwJ10uJzwvc3R5bGU+JywNCgkpOw0KCXJldHVybiAkcmV0Ow0KfQ0KDQovLyBNdWx0aS1m aWxlIGRyb3Bkb3duIHNlbGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX211bHRp c2VsKCRzZWxuYW1lPScnLCAkdHJlZT1hcnJheSgpLCAkc2VsPWFycmF5KCkpIHsNCgkkb3V0 W10gPSAnPHNlbGVjdCBpZD0iJy4kc2VsbmFtZS4nIiBuYW1lPSInLiRzZWxuYW1lLidbXSIg Y2xhc3M9Imxpc3QiIHN0eWxlPSJoZWlnaHQ6NDAwcHg7IiBtdWx0aXBsZT0ibXVsdGlwbGUi Pic7DQoJZm9yZWFjaCAoJHRyZWUgYXMgJGxlYWYpIHsNCgkJJHNlbGVjdGVkPScnOw0KCQlp ZiAoaW5fYXJyYXkoJGxlYWYsICRzZWwpKSB7DQoJCQkkc2VsZWN0ZWQgPSAnIHNlbGVjdGVk PSJzZWxlY3RlZCInOw0KCQl9DQoNCgkJJG91dFtdID0gdC4nPG9wdGlvbicuJHNlbGVjdGVk Lic+Jy5odG1sc3BlY2lhbGNoYXJzKCRsZWFmKS4nPC9vcHRpb24+Jy5uOw0KCX0NCgkkb3V0 W10gPSAnPC9zZWxlY3Q+JzsNCglyZXR1cm4gam9pbignJywkb3V0KTsNCn0NCg0KLy8gUGFz c3dvcmQgc3RyZW5ndGggbWV0ZXINCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19jaHJvbm9z dHJlbmd0aCgkZXZ0LCAkc3RwKSB7DQoJZ2xvYmFsICRldmVudCwgJHNtZF9wcm9nbm9zdGlj c19zdHlsZTsNCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnskc21k X3Byb2dub3N0aWNzX3N0eWxlWydtZXRlciddfTwvc3R5bGU+DQo8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCI+DQovLzwhW0NEQVRBWw0KLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKioNCioqICAgRnJh bmtlbnN0ZWluZWQgZnJvbSBhbiBvcmlnaW5hbCAoR1BMKSBzY3JpcHQNCioqICAgYnkgU21h bGwgSGFkcm9uIENvbGxpZGVyIC0tIFRoYW5rcyENCioqICAgaHR0cDovL3d3dy5zbWFsbGhh ZHJvbmNvbGxpZGVyLmNvbQ0KKioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmZ1bmN0aW9uIHNtZF9wcm9nbm9z dGljc19nVHh0KHdoYXQpIHsNCgl2YXIgbGFuZyA9IG5ldyBBcnJheSgpOw0KCWxhbmdbJ2Fi b3V0J10gPSAnYWJvdXQgJzsNCglsYW5nWydkaWdpdHNlcCddID0gJywnOw0KCWxhbmdbJ3Bs dXJhbCddID0gJ3MnOw0KCWxhbmdbJ3B3X2NvbW1vbiddID0gJ29uZSBvZiB0aGUgNTAwIG1v c3QgY29tbW9uIHBhc3N3b3Jkcyc7DQoJbGFuZ1sncHdfcG9zdGFtYmxlJ10gPSAnSXQgd291 bGQgYmUgY3JhY2tlZCBhbG1vc3QgaW5zdGFudGx5JzsNCglsYW5nWydwd19wcmVhbWJsZSdd ID0gJ1lvdXIgcGFzc3dvcmQgaXMnOw0KCWxhbmdbJ3B3X3Rha2UnXSA9ICdJdCB3b3VsZCB0 YWtlJzsNCglsYW5nWydwd19jcmFjayddID0gJ2ZvciBhIGRlc2t0b3AgUEMgdG8gY3JhY2sg eW91ciBwYXNzIGJ5IGJydXRlIGZvcmNlPGJyIC8+KHVubGVzcyB5b3UgPGEgaHJlZj0iaHR0 cDovL3N0ZWZkYXdzb24uY29tL2Jsb2cvY2hvb3NpbmctYS1icmlsbGlhbnQtcGFzc3dvcmQv Ij5icm9rZSB0aGUgcnVsZXM8L2E+LCBpbiB3aGljaCBjYXNlIGl0XCdkIGJlIGNyYWNrZWQg YWxtb3N0IGluc3RhbnRseSknOw0KCWxhbmdbJ3NlY3MnXSA9ICcgc2Vjb25kcyc7DQoJbGFu Z1sndF9zZWMnXSA9ICdzZWNvbmQnOw0KCWxhbmdbJ3RfbWluJ10gPSAnbWludXRlJzsNCgls YW5nWyd0X2hyJ10gPSAnaG91cic7DQoJbGFuZ1sndF9kYXknXSA9ICdkYXknOw0KCWxhbmdb J3RfeXInXSA9ICd5ZWFyJzsNCglsYW5nWyd0X3Rob195J10gPSAndGhvdXNhbmQgeWVhcnMn Ow0KCWxhbmdbJ3RfbWlsX3knXSA9ICdtaWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X2JpbF95 J10gPSAnYmlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF90cmlfeSddID0gJ3RybGxpb24geWVh cnMnOw0KCWxhbmdbJ3RfcXVhX3knXSA9ICdxdWFkcmlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sn dF9xdWlfeSddID0gJ3F1aW50aWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X3NleF95J10gPSAn c2V4dGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9zZXBfeSddID0gJ3NlcHRpbGxpb24geWVh cnMnOw0KCWxhbmdbJ3Rfb2N0X3knXSA9ICdvY3RpbGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rf bm9uX3knXSA9ICdub25pbGxpb24geWVhcnMnOw0KCXJldHVybiBsYW5nW3doYXRdOw0KfQ0K DQpmdW5jdGlvbiBzbWRfcHJvZ19jaHJvbm9TdHJlbmd0aChwdykgew0KCXZhciBzaXplID0g cHcubGVuZ3RoOw0KCXZhciBzbWRfcHJvZ19jb21tb25fcHcgPSBuZXcgQXJyYXkoKTsNCgl2 YXIgcHJlY2lzaW9uID0gNzsNCglzbWRfcHJvZ19jb21tb25fcHdbM10gPSBbJ2dvZCcsJ3Nl eCddOw0KCXNtZF9wcm9nX2NvbW1vbl9wd1s0XSA9IFsnMTIzNCcsJ2Nvb2wnLCcxMzEzJywn c3RhcicsJ2dvbGYnLCdiZWFyJywnZGF2ZScsJ3Bhc3MnLCdhYWFhJywnNjk2OScsJ2pha2Un LCdtYXR0JywnMTIxMicsJ2Zpc2gnLCdmdWNrJywncG9ybicsJzQzMjEnLCcyMDAwJywnNDEy OCcsJ3Rlc3QnLCdzaGl0JywnbG92ZScsJ2JhYnknLCdjdW50JywnbWFyaycsJzMzMzMnLCdq b2huJywnc2V4eScsJzUxNTAnLCc0NDQ0JywnMjExMicsJ2ZyZWQnLCdtaWtlJywnMTExMScs J3RpdHMnLCdwYXVsJywnbWluZScsJ2tpbmcnLCdmaXJlJywnNTU1NScsJ3NsdXQnLCdnaXJs JywnMjIyMicsJ2FzZGYnLCd0aW1lJywnNzc3NycsJ3JvY2snLCd4eHh4JywnZm9yZCcsJ2Rp Y2snLCdiaWxsJywnd29sZicsJ2JsdWUnLCdhbGV4JywnY29jaycsJ2JlZXInLCdlcmljJywn NjY2NicsJ2phY2snXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNV0gPSBbJ2JlYWNoJywnZ3Jl YXQnLCdibGFjaycsJ3B1c3N5JywnMTIzNDUnLCdmcmFuaycsJ3RpZ2VyJywnamFwYW4nLCdt b25leScsJ25ha2VkJywnMTExMTEnLCdhbmdlbCcsJ3N0YXJzJywnYXBwbGUnLCdwb3Jubycs J3N0ZXZlJywndmlwZXInLCdob3JueScsJ291ODEyJywna2V2aW4nLCdidWRkeScsJ3RlZW5z JywneW91bmcnLCdqYXNvbicsJ2x1Y2t5JywnZ2lybHMnLCdsb3ZlcicsJ2JyaWFuJywna2l0 dHknLCdidWJiYScsJ2hhcHB5JywnY3JlYW0nLCdqYW1lcycsJ3h4eHh4JywnYm9vdHknLCdr ZWxseScsJ2Jvb2JzJywncGVuaXMnLCdlYWdsZScsJ3doaXRlJywnZW50ZXInLCdjaGV2eScs J3NtaXRoJywnY2hyaXMnLCdncmVlbicsJ3NhbW15Jywnc3VwZXInLCdtYWdpYycsJ3Bvd2Vy JywnZW5qb3knLCdzY290dCcsJ2RhdmlkJywndmlkZW8nLCdxd2VydCcsJ3BhcmlzJywnd29t ZW4nLCdqdWljZScsJ2RpcnR5JywnbXVzaWMnLCdwZXRlcicsJ2JpdGNoJywnaG91c2UnLCdo ZWxsbycsJ2JpbGx5JywnbW92aWUnXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNl0gPSBbJzEy MzQ1NicsJ3ByaW5jZScsJ2d1aXRhcicsJ2J1dHRlcicsJ2phZ3VhcicsJ3VuaXRlZCcsJ3R1 cnRsZScsJ211ZmZpbicsJ2Nvb3BlcicsJ25hc2NhcicsJ3JlZHNveCcsJ2RyYWdvbicsJ3p4 Y3ZibicsJ3F3ZXJ0eScsJ3RvbWNhdCcsJzY5Njk2OScsJzY1NDMyMScsJ211cnBoeScsJzk4 NzY1NCcsJ2FtYW5kYScsJ2JyYXppbCcsJ3dpemFyZCcsJ2hhbm5haCcsJ2xhdXJlbicsJ21h c3RlcicsJ2RvY3RvcicsJ2VhZ2xlMScsJ2dhdG9ycycsJ3NxdWlydCcsJ3NoYWRvdycsJ21p Y2tleScsJ21vdGhlcicsJ21vbmtleScsJ2JhaWxleScsJ2p1bmlvcicsJ25hdGhhbicsJ2Fi YzEyMycsJ2tuaWdodCcsJ2FsZXhpcycsJ2ljZW1hbicsJ2Z1Y2ttZScsJ3RpZ2VycycsJ2Jh ZGJveScsJ2Jvbm5pZScsJ3B1cnBsZScsJ2RlYmJpZScsJ2FuZ2VsYScsJ2pvcmRhbicsJ2Fu ZHJlYScsJ3NwaWRlcicsJ2hhcmxleScsJ3JhbmdlcicsJ2Rha290YScsJ2Jvb2dlcicsJ2l3 YW50dScsJ2FhYWFhYScsJ2xvdmVycycsJ3BsYXllcicsJ2ZseWVycycsJ3N1Y2tpdCcsJ2h1 bnRlcicsJ2JlYXZlcicsJ21vcmdhbicsJ21hdHJpeCcsJ2Jvb21lcicsJ3J1bm5lcicsJ2Jh dG1hbicsJ3Njb29ieScsJ2Vkd2FyZCcsJ3Rob21hcycsJ3dhbHRlcicsJ2hlbHBtZScsJ2dv cmRvbicsJ3RpZ2dlcicsJ2phY2tpZScsJ2Nhc3BlcicsJ3JvYmVydCcsJ2Jvb2JvbycsJ2Jv c3RvbicsJ21vbmljYScsJ3N0dXBpZCcsJ2FjY2VzcycsJ2NvZmZlZScsJ2JyYXZlcycsJ3h4 eHh4eCcsJ3lhbmtlZScsJ3NhdHVybicsJ2J1c3RlcicsJ2dlbWluaScsJ2Jhcm5leScsJ2Fw cGxlcycsJ3NvY2NlcicsJ3JhYmJpdCcsJ3ZpY3RvcicsJ2F1Z3VzdCcsJ2hvY2tleScsJ3Bl YW51dCcsJ3R1Y2tlcicsJ2tpbGxlcicsJ2NhbmFkYScsJ2dlb3JnZScsJ2pvaG5ueScsJ3Np ZXJyYScsJ2JsYXplcicsJ2FuZHJldycsJ3NwYW5reScsJ2RvZ2dpZScsJzIzMjMyMycsJ3dp bnRlcicsJ3p6enp6eicsJ2JyYW5keScsJ2d1bm5lcicsJ2JlYXZpcycsJ2NvbXBhcScsJ2hv cm5leScsJzExMjIzMycsJ2NhcmxvcycsJ2FydGh1cicsJ2RhbGxhcycsJ3Rlbm5pcycsJ3Nv cGhpZScsJ2xhZGllcycsJ2NhbHZpbicsJ3NoYXZlZCcsJ3BlcHBlcicsJ2dpYW50cycsJ3N1 cmZlcicsJ2ZlbmRlcicsJ3NhbXNvbicsJ2F1c3RpbicsJ21lbWJlcicsJ2Jsb25kZScsJ2Js b3dtZScsJ2Z1Y2tlZCcsJ2RhbmllbCcsJ2RvbmFsZCcsJ2dvbGRlbicsJ2dvbGZlcicsJ2Nv b2tpZScsJ3N1bW1lcicsJ2Jyb25jbycsJ3JhY2luZycsJ3NhbmRyYScsJ2hhbW1lcicsJ3Bv b2tpZScsJ2pvc2VwaCcsJ2hlbnRhaScsJ2pvc2h1YScsJ2RpYWJsbycsJ2JpcmRpZScsJ21h Z2dpZScsJ3NleHNleCcsJ2xpdHRsZScsJ2JpdGVtZScsJzY2NjY2NicsJ3RvcGd1bicsJ2Fz aGxleScsJ3dpbGxpZScsJ3N0aWNreScsJ2Nvd2JveScsJ2FuaW1hbCcsJ3NpbHZlcicsJ3lh bWFoYScsJ3FhendzeCcsJ2Z1Y2tlcicsJ2p1c3RpbicsJ3NraXBweScsJ29yYW5nZScsJ2Jh bmFuYScsJ2xha2VycycsJ21hcnZpbicsJ21lcmxpbicsJ2RyaXZlcicsJ3JhY2hlbCcsJ21h cmluZScsJ3NsYXllcicsJ2FuZ2VscycsJ2FzZGZnaCcsJ2JpZ2RvZycsJ3ZhZ2luYScsJ2Fw b2xsbycsJ2NoZWVzZScsJ3RveW90YScsJ3BhcmtlcicsJ21hZGRvZycsJ3RyYXZpcycsJzEy MTIxMicsJ2xvbmRvbicsJ2hvdGRvZycsJ3dpbHNvbicsJ3N5ZG5leScsJ21hcnRpbicsJ2Rl bm5pcycsJ3Zvb2RvbycsJ2dpbmdlcicsJ21hZ251bScsJ2FjdGlvbicsJ25pY29sZScsJ2Nh cnRlcicsJ2Vyb3RpYycsJ3NwYXJreScsJ2phc3BlcicsJzc3Nzc3NycsJ3llbGxvdycsJ3Nt b2tleScsJ2RyZWFtcycsJ2NhbWFybycsJ3hhdmllcicsJ3RlcmVzYScsJ2ZyZWRkeScsJ3Nl Y3JldCcsJ3N0ZXZlbicsJ2plcmVteScsJ3Zpa2luZycsJ2ZhbGNvbicsJ3Nub29weScsJ3J1 c3NpYScsJ3RheWxvcicsJ25pcHBsZScsJzExMTExMScsJ2VhZ2xlcycsJzEzMTMxMycsJ3dp bm5lcicsJ3Rlc3RlcicsJzEyMzEyMycsJ21pbGxlcicsJ3JvY2tldCcsJ2xlZ2VuZCcsJ2Zs b3dlcicsJ3RoZW1hbicsJ3BsZWFzZScsJ29saXZlcicsJ2FsYmVydCddOw0KCXNtZF9wcm9n X2NvbW1vbl9wd1s3XSA9IFsncG9yc2NoZScsJ3Jvc2VidWQnLCdjaGVsc2VhJywnYW1hdGV1 cicsJzc3Nzc3NzcnLCdkaWFtb25kJywndGlmZmFueScsJ2phY2tzb24nLCdzY29ycGlvJywn Y2FtZXJvbicsJ3Rlc3RpbmcnLCdzaGFubm9uJywnbWFkaXNvbicsJ211c3RhbmcnLCdib25k MDA3JywnbGV0bWVpbicsJ21pY2hhZWwnLCdnYXRld2F5JywncGhvZW5peCcsJ3RoeDExMzgn LCdyYWlkZXJzJywnZm9yZXZlcicsJ3BlYWNoZXMnLCdqYXNtaW5lJywnbWVsaXNzYScsJ2dy ZWdvcnknLCdjb3dib3lzJywnZG9scGhpbicsJ2NoYXJsZXMnLCdjdW1zaG90JywnY29sbGVn ZScsJ2J1bGxkb2cnLCcxMjM0NTY3JywnbmNjMTcwMScsJ2dhbmRhbGYnLCdsZWF0aGVyJywn Y3VtbWluZycsJ2h1bnRpbmcnLCdjaGFybGllJywncmFpbmJvdycsJ2Fzc2hvbGUnLCdiaWdj b2NrJywnZnVja3lvdScsJ2plc3NpY2EnLCdwYW50aWVzJywnam9obnNvbicsJ25hdWdodHkn LCdicmFuZG9uJywnYW50aG9ueScsJ3dpbGxpYW0nLCdmZXJyYXJpJywnY2hpY2tlbicsJ2hl YXRoZXInLCdjaGljYWdvJywndm95YWdlcicsJ3lhbmtlZXMnLCdyYW5nZXJzJywncGFja2Vy cycsJ25ld3lvcmsnLCd0cm91YmxlJywnYmlndGl0cycsJ3dpbnN0b24nLCd0aHVuZGVyJywn d2VsY29tZScsJ2JpdGNoZXMnLCd3YXJyaW9yJywncGFudGhlcicsJ2Jyb25jb3MnLCdyaWNo YXJkJywnODY3NTMwOScsJ3ByaXZhdGUnLCd6eGN2Ym5tJywnbmlwcGxlcycsJ2Jsb25kZXMn LCdmaXNoaW5nJywnbWF0dGhldycsJ2hvb3RlcnMnLCdwYXRyaWNrJywnZnJlZWRvbScsJ2Z1 Y2tpbmcnLCdleHRyZW1lJywnYmxvd2pvYicsJ2NhcHRhaW4nLCdiaWdkaWNrJywnYWJncnR5 dScsJ2NoZXN0ZXInLCdtb25zdGVyJywnbWF4d2VsbCcsJ2Fyc2VuYWwnLCdjcnlzdGFsJywn cmViZWNjYScsJ3B1c3NpZXMnLCdmbG9yaWRhJywncGhhbnRvbScsJ3Njb290ZXInLCdzdWNj ZXNzJ107DQoJc21kX3Byb2dfY29tbW9uX3B3WzhdID0gWydmaXJlYmlyZCcsJ3Bhc3N3b3Jk JywnMTIzNDU2NzgnLCdzdGVlbGVycycsJ21vdW50YWluJywnY29tcHV0ZXInLCdiYXNlYmFs bCcsJ3h4eHh4eHh4JywnZm9vdGJhbGwnLCdxd2VydHl1aScsJ2plbm5pZmVyJywnZGFuaWVs bGUnLCdzdW5zaGluZScsJ3N0YXJ3YXJzJywnd2hhdGV2ZXInLCduaWNob2xhcycsJ3N3aW1t aW5nJywndHJ1c3RubzEnLCdtaWRuaWdodCcsJ3ByaW5jZXNzJywnc3RhcnRyZWsnLCdtZXJj ZWRlcycsJ3N1cGVybWFuJywnYmlnZGFkZHknLCdtYXZlcmljaycsJ2VpbnN0ZWluJywnZG9s cGhpbnMnLCdoYXJkY29yZScsJ3JlZHdpbmdzJywnY29jYWNvbGEnLCdtaWNoZWxsZScsJ3Zp Y3RvcmlhJywnY29ydmV0dGUnLCdidXR0aGVhZCcsJ21hcmxib3JvJywnc3Jpbml2YXMnLCdp bnRlcm5ldCcsJ3JlZHNraW5zJywnMTExMTExMTEnLCdhY2Nlc3MxNCcsJ3J1c2gyMTEyJywn c2NvcnBpb24nLCdpbG92ZXlvdScsJ3NhbWFudGhhJywnbWlzdHJlc3MnXTsNCg0KCS8vIENo ZWNrIHB3IGFnYWluc3QgY29tbW9uIHBhc3N3b3JkcyBvZiB0aGF0IGxlbmd0aCB0byBzZWUg aWYgaXQncyBpbiB0b3AgNTAwDQoJaWYgKHNpemUgPiAyICYmIHNpemUgPCA5KSB7DQoJCXZh ciB3aWR0aCA9IHNtZF9wcm9nX2NvbW1vbl9wd1tzaXplXS5sZW5ndGg7DQoJCWZvciAodmFy IGlkeD0wOyBpZHggPCB3aWR0aDsgaWR4KyspIHsNCgkJCWlmIChwdy50b0xvd2VyQ2FzZSgp ID09IHNtZF9wcm9nX2NvbW1vbl9wd1tzaXplXVtpZHhdKSB7DQoJCQkJcmV0dXJuIC0xOw0K CQkJfQ0KCQl9DQoJfQ0KDQoJLy8gQ2FsY3VsYXRpb25zIHBlciBzZWNvbmQuIFRlbiBtaWxs aW9uIGlzIHJvdWdobHkgdGhlIG51bWJlciBhIGRlY2VudCBQQyBjb3VsZCBtYW5hZ2UgdW5p bmhpYml0ZWQgaW4gMjAxMC4NCgkvLyBBdXRvbWF0aWNhbGx5IGRvdWJsZWQgZXZlcnkgMTgg bW9udGhzIGFjY29yZGluZyB0byBNb29yZSdzIGxhdywgYW1vcnRpc2VkIGJ5IG1vbnRoDQoJ dmFyIGNhbGNzUGVyU2VjID0gMTAwMDAwMDA7DQoJdmFyIGR0ID0gbmV3IERhdGUoKTsNCgl2 YXIgYmFzZVllYXIgPSAnMjAxMCc7DQoJdmFyIHRoaXNZZWFyID0gZHQuZ2V0RnVsbFllYXIo KTsNCgl2YXIgdGhpc01vbnRoID0gZHQuZ2V0TW9udGgoKTsgLy8gMC0xMQ0KCXZhciBtb250 aHNTaW5jZUJhc2UgPSAoKHRoaXNZZWFyIC0gYmFzZVllYXIpICogMTIpICsgdGhpc01vbnRo Ow0KCXZhciBtb29yZVBlcmlvZHMgPSBNYXRoLmZsb29yKG1vbnRoc1NpbmNlQmFzZSAvIDE4 KSArIDE7DQoJY2FsY3NQZXJTZWMgKj0gbW9vcmVQZXJpb2RzOw0KCXZhciBpbmNyZW1lbnRQ ZXJNb250aCA9IGNhbGNzUGVyU2VjIC8gMTg7IC8vIEhvdyBtYW55IGNhbGNzIGl0IGdvZXMg dXAgYnkgaW4gdGhpcyBNb29yZSBwZXJpb2QsIHBlciBtb250aA0KCWNhbGNzUGVyU2VjICs9 IChpbmNyZW1lbnRQZXJNb250aCAqIChtb250aHNTaW5jZUJhc2UlMTgpKTsNCg0KCS8vIEtl ZXAgdHJhY2sgb2YgaG93IG1hbnkgY2hhcmFjdGVyIHNldHMgYXJlIHVzZWQNCgl2YXIgcG9z c0NoYXJzID0gMDsNCgkvLyBMb3dlcmNhc2UNCglpZiAocHcubWF0Y2goL1thLXpdLykpIHsg cG9zc0NoYXJzICs9IDI2OyB9DQoJLy8gVXBwZXJjYXNlDQoJaWYgKHB3Lm1hdGNoKC9bQS1a XS8pKSB7IHBvc3NDaGFycyArPSAyNjsgfQ0KCS8vIE51bWJlcnMNCglpZiAocHcubWF0Y2go L1xkKy8pKSB7IHBvc3NDaGFycyArPSAxMDsgfQ0KCS8vIFN5bWJvbHMNCglpZiAocHcubWF0 Y2goL1shLEAsIyzCoywkLOKCrCzCpSwlLF4sJiwqLCssPSw/LF8sfixcLSwoLCksPCw+LFws LFwuLFxbLFxdLFx7LFx9LFx8LFw6LFw7LFwnLFwiLFxgLFwvLFxcXCxcwqxdLykgKSB7cG9z c0NoYXJzICs9IDM2fTsNCg0KCS8vIFdvcmsgb3V0IHRoZSBudW1iZXIgb2YgcG9zc2libGUg Y29tYmluYXRpb25zOiBwb3NzaWJsZSBjaGFyYWN0ZXJzIHRvIHRoZSBwb3dlciBvZiB0aGUg cGFzc3dvcmQgbGVuZ3RoDQoJdmFyIHBvc3NDb21ib3MgPSBNYXRoLnBvdyhwb3NzQ2hhcnMs IHNpemUpOw0KDQoJLy8gRGl2aWRlIHRoZSBudW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRp b25zIGJ5IHRoZSBjYWxjdWxhdGlvbnMgYSBQQyBjYW4gZG8gcGVyIHNlY29uZA0KCXZhciBj cmFja1RpbWVJblNlY3MgPSBwb3NzQ29tYm9zIC8gY2FsY3NQZXJTZWM7DQoNCgkvLyBTZXQg dXAgYW4gYXJyYXkgb2YgcGVyaW9kcyB3aXRoIHRoZWlyIGxlbmd0aHMgaW4gc2Vjb25kcw0K CXZhciBzbWRfcGVyaW9kcyA9IG5ldyBBcnJheSgpOw0KCXNtZF9wZXJpb2RzWyd0X21pbidd ID0gNjA7DQoJc21kX3BlcmlvZHNbJ3RfaHInXSA9IHNtZF9wZXJpb2RzWyd0X21pbiddICog NjA7DQoJc21kX3BlcmlvZHNbJ3RfZGF5J10gPSBzbWRfcGVyaW9kc1sndF9ociddICogMjQ7 DQoJc21kX3BlcmlvZHNbJ3RfeXInXSA9IHNtZF9wZXJpb2RzWyd0X2RheSddICogMzY1LjI1 Ow0KCXNtZF9wZXJpb2RzWyd0X3Rob195J10gPSBzbWRfcGVyaW9kc1sndF95ciddICogMTAw MDsNCglzbWRfcGVyaW9kc1sndF9taWxfeSddID0gc21kX3BlcmlvZHNbJ3RfdGhvX3knXSAq IDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfYmlsX3knXSA9IHNtZF9wZXJpb2RzWyd0X21pbF95 J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3RyaV95J10gPSBzbWRfcGVyaW9kc1sndF9i aWxfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9xdWFfeSddID0gc21kX3BlcmlvZHNb J3RfdHJpX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfcXVpX3knXSA9IHNtZF9wZXJp b2RzWyd0X3F1YV95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3NleF95J10gPSBzbWRf cGVyaW9kc1sndF9xdWlfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9zZXBfeSddID0g c21kX3BlcmlvZHNbJ3Rfc2V4X3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfb2N0X3kn XSA9IHNtZF9wZXJpb2RzWyd0X3NlcF95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X25v bl95J10gPSBzbWRfcGVyaW9kc1sndF9vY3RfeSddICogMTAwMDsNCg0KCS8vIFBlcmlvZCB0 eXBlIGlzICdzZWNvbmRzJyBieSBkZWZhdWx0DQoJdmFyIHBlcmlvZFR5cGUgPSAndF9zZWMn Ow0KCXZhciBzdHJlbmd0aCA9ICcnOw0KDQoJLy8gSWYgaXQgd2lsbCB0YWtlIGxlc3MgdGhh biBhIHNlY29uZCB0byBjcmFjayB0aGUgcGFzc3dvcmQsIHNob3cgZXhhY3RseSBob3cgbG9u Zw0KCWlmIChjcmFja1RpbWVJblNlY3MgPCAxKSB7DQoJCXN0cmVuZ3RoID0gY3JhY2tUaW1l SW5TZWNzLnRvRml4ZWQocHJlY2lzaW9uKSArIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzZWNz Jyk7DQoJfSBlbHNlIHsNCgkJLy8gT3RoZXJ3aXNlIHNob3cgYSByb3VuZGVkLWRvd24gbnVt YmVyDQoJCS8vIEFkZHMgdGhlIHBsdXJhbCBvbnRvIGFueXRoaW5nIGJlZm9yZSBhIHRob3Vz YW5kIHllYXJzDQoJCXZhciBpbnRvVGhvdXNhbmRzID0gc21kX3Byb2dub3N0aWNzX2dUeHQo J3BsdXJhbCcpOw0KDQoJCS8vIEFkZHMgdGhlICdBYm91dCcgdG8gYW55dGhpbmcgYWZ0ZXIg c2Vjb25kcw0KCQl2YXIgaW50b01pbnV0ZXMgPSAnJzsNCg0KCQkvLyBSb3VuZCBkb3duIHRo ZSB0aW1lDQoJCXZhciBuZXdUaW1lID0gTWF0aC5mbG9vcihjcmFja1RpbWVJblNlY3MpOw0K DQoJCS8vIEdvIHRocm91Z2ggZGlmZmVyZW50IHBlcmlvZCBsZW5ndGhzDQoJCWZvciAodmFy IGpkeCBpbiBzbWRfcGVyaW9kcykgew0KCQkJLy8gU3RvcCB3aGVuIHRoZSByaWdodCBwZXJp b2QgaXMgcmVhY2hlZA0KCQkJaWYgKGNyYWNrVGltZUluU2VjcyA8IHNtZF9wZXJpb2RzW2pk eF0pIHsgYnJlYWs7IH0NCgkJCWVsc2Ugew0KCQkJCWlmIChqZHggPT0gInRfdGhvX3kiKSB7 IGludG9UaG91c2FuZHMgPSAnJzsgfQ0KCQkJCWlmIChqZHggPT0gInRfbWluIikgeyBpbnRv TWludXRlcyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhYm91dCcpOyB9DQoJCQkJbmV3VGlt ZSA9IE1hdGguZmxvb3IoY3JhY2tUaW1lSW5TZWNzIC8gc21kX3BlcmlvZHNbamR4XSk7DQoJ CQkJcGVyaW9kVHlwZSA9IGpkeDsNCgkJCX0NCgkJfQ0KDQoJCS8vIElmIHNpbmd1bGFyDQoJ CWlmIChuZXdUaW1lID09IDEpIHsNCgkJCXN0cmVuZ3RoID0gc21kX3Byb2dub3N0aWNzX2dU eHQoJ2Fib3V0JykgKyAnMSAnICsgc21kX3Byb2dub3N0aWNzX2dUeHQocGVyaW9kVHlwZSk7 DQoJCX0gZWxzZSB7DQoJCQkvLyBDb252ZXJ0IG5ld1RpbWUgdG8gc3RyaW5nDQoJCQluZXdU aW1lICs9ICcnOw0KDQoJCQkvLyBTcGxpdCB3aXRoIGNvbW1hcyBldmVyeSB0aHJlZSBkaWdp dHMNCgkJCXZhciByZWdleCA9IC8oXGQrKShcZHszfSkvOw0KDQoJCQl3aGlsZSAocmVnZXgu dGVzdChuZXdUaW1lKSkgew0KCQkJCW5ld1RpbWUgPSBuZXdUaW1lLnJlcGxhY2UocmVnZXgs ICckMScgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnZGlnaXRzZXAnKSArICckMicpOw0KCQkJ fQ0KDQoJCQkvLyBDb21iaW5lIHdpdGggJ2Fib3V0JyBpZiBuZWVkZWQsIHRoZSB0aW1lIGl0 IHdpbGwgdGFrZSwgdGhlIHBlcmlvZCB0eXBlLCBhbmQgdGhlICdzJyBpZiBuZWVkZWQNCgkJ CXN0cmVuZ3RoID0gaW50b01pbnV0ZXMgKyBuZXdUaW1lICsgIiAiICsgc21kX3Byb2dub3N0 aWNzX2dUeHQocGVyaW9kVHlwZSkgKyBpbnRvVGhvdXNhbmRzOw0KCQl9DQoJfQ0KDQoJcmV0 dXJuIHN0cmVuZ3RoOw0KfQ0KDQpmdW5jdGlvbiBwYXNzd29yZENoZWNrKHRoYXQsIGUpIHsN CglpZiAoZS5rZXlDb2RlID09IDI3IHx8IGUuY2hhckNvZGUgPT0gMjcpIHsNCgkJalF1ZXJ5 KHRoYXQpLnZhbCgiIik7DQoJfQ0KDQoJdmFyIHBhc3N3b3JkID0galF1ZXJ5KHRoYXQpLnZh bCgpOw0KDQoJaWYgKHBhc3N3b3JkICE9ICIiKSB7DQoJCXZhciBzdHJlbmd0aCA9IHNtZF9w cm9nX2Nocm9ub1N0cmVuZ3RoKHBhc3N3b3JkKTsNCg0KCQkvL1RPRE86IGdUeHQoKQ0KCQlp ZiAoc3RyZW5ndGggPT0gLTEpIHsNCgkJCWpRdWVyeSgiI3NtZF9wcm9nX21ldGVyIikuaHRt bChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfcHJlYW1ibGUnKSArICcgPGRpdiBjbGFzcz0i c21kX3Byb2dfcGFzc19zdHJlbmd0aCI+JyArIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwd19j b21tb24nKSArICc8L2Rpdj4gJysgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3X3Bvc3RhbWJs ZScpKS5mYWRlSW4oNTAwKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiI3NtZF9wcm9nX21l dGVyIikuaHRtbChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfdGFrZScpICsgJyA8ZGl2IGNs YXNzPSJzbWRfcHJvZ19wYXNzX3N0cmVuZ3RoIj4nICsgc3RyZW5ndGggKyAnPC9kaXY+ICcg KyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfY3JhY2snKSkuZmFkZUluKDUwMCk7DQoJCX0N Cgl9IGVsc2Ugew0KCQlqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmhpZGUoKTsNCgl9DQp9 DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJdmFyIHNtZF9wcm9nX21ldGVyID0gJzxkaXYgaWQ9 InNtZF9wcm9nX21ldGVyIj48L2Rpdj4nOw0KCWpRdWVyeSgiI2NoYW5nZV9wYXNzd29yZCIp LmFwcGVuZChzbWRfcHJvZ19tZXRlcik7DQoJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5o aWRlKCk7DQoJalF1ZXJ5KCIjbmV3X3Bhc3MiKS5rZXlkb3duKGZ1bmN0aW9uKGUpIHsNCgkJ aWYgKGUua2V5Q29kZSA9PSAxMyB8fCBlLmNoYXJDb2RlID09IDEzKSB7DQoJCQlyZXR1cm4g ZmFsc2U7DQoJCX0NCgl9KTsNCglqUXVlcnkoIiNuZXdfcGFzcyIpLmtleXVwKGZ1bmN0aW9u KGUpew0KCQlwYXNzd29yZENoZWNrKHRoaXMsIGUpOw0KCX0pOw0KfSk7DQovL11dPg0KPC9z Y3JpcHQ+DQpFT1M7DQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy8gV2ViIHBhZ2UJCSA6IGh0dHA6 Ly9jb2RlLmdvb2dsZS5jb20vcC9waHByb3RlY3Rvcg0KLy8gQXV0b3IJCQkJOiBIdWdvIFNv dXNhIAkJYWRhbWFzdG9yNjY2QGdtYWlsLmNvbQ0KLy8gRGF0ZQkJCQkgOiAyMDEwLTAzLTI1 DQovLyBWZXJzaW9uCQkJOiAwLjMuMS4xDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCmNsYXNzIHNtZF9w cm9nX1BoUHJvdGVjdG9yIHsNCgl2YXIgJFNIT1dfRVJST1JTOw0KDQoJcHVibGljIGZ1bmN0 aW9uIHNtZF9wcm9nX1BoUHJvdGVjdG9yKCRzaG93X2Vycm9ycykgew0KCQkkdGhpcy0+U0hP V19FUlJPUlM9JHNob3dfZXJyb3JzOw0KCQlpZiAoJHRoaXMtPlNIT1dfRVJST1JTKSB7DQoJ CQllcnJvcl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFSU0UpOwkgLy9T aG93IGVycm9ycw0KCQkJaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAiMSIpOwkvL2Rpc3Bs YXkgZXJyb3JzDQoJCX0gZWxzZSB7DQoJCQlpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICIw Iik7IC8vZGlzcGxheSBlcnJvcnMNCgkJCWluaV9zZXQoJ2xvZ19lcnJvcnMnLCAiMSIpOwkv L2xvZ19lcnJvcnMNCgkJfQ0KCX0NCg0KCS8qDQoJKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNh bGxlZCBpbiBhIGluZGV4IHBhZ2UgdGhhdCByZWRpcmVjdHMgdG8gb3RoZXIgcGFnZXMNCgkq DQoJKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNNYWxpY2lvdXMoKSB7DQoJCSRzcWxpID0gMDsN Cg0KCQkkc3FsaSA9IGNhbGxiYWNrX2V2ZW50KCdzbWRfcHJvZ25vc3RpY3MnLCAnc3FsX2lu amVjdGlvbicsIGZhbHNlKTsNCg0KCQlpZiAoISRzcWxpKSB7DQoJCQkkbnVtX2JhZF93b3Jk czEgPSAkdGhpcy0+Q2hlY2tHZXQoKTsNCgkJCSRudW1fYmFkX3dvcmRzMiA9ICR0aGlzLT5D aGVja1Bvc3QoKTsNCgkNCgkJCWlmICgkbnVtX2JhZF93b3JkczEgPiAwKSB7DQoJCQkJJHNx bGkgPSB0cnVlOw0KCQkJfQ0KCQ0KCQkJaWYgKCRudW1fYmFkX3dvcmRzMiA+IDApIHsNCgkJ CQkkc3FsaSA9IHRydWU7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gKCgkc3FsaSA8PSAwKSA/ IGZhbHNlIDogJHNxbGkpOw0KCX0NCg0KCS8vY2hlY2sgZm9yIHNxbCBpbmplY3Rpb24gYW5k IFhTUyBpbiBQb3N0IHZhcmlhYmxlcw0KCXByaXZhdGUgZnVuY3Rpb24gQ2hlY2tQb3N0KCkg ew0KCQkkbnVtX2JhZF93b3JkcyA9IDA7DQoNCgkJZm9yZWFjaCgkX1BPU1QgYXMgJGNhbXBv ID0+ICRpbnB1dCkgew0KCQkJJF9QT1NUWyRjYW1wb109IGRvQXJyYXkoJF9QT1NUWyRjYW1w b10sICdodG1sZW50aXRpZXMnKTsgLy8gWFNTIFBST1RFQ1RJT04NCgkJCSRudW1fYmFkX3dv cmRzID0gJG51bV9iYWRfd29yZHMgKyAkdGhpcy0+d29yZEV4aXN0cygkaW5wdXQpOyAvL1NR TCBJTkpFQ1RJT04NCgkJfQ0KDQoJCXJldHVybiAkbnVtX2JhZF93b3JkczsNCgl9DQoNCgkv L2NoZWNrIGZvciBzcWwgaW5qZWN0aW9uIGFuZCBYU1MgaW4gR0VUIHZhcmlhYmxlcw0KCXBy aXZhdGUgZnVuY3Rpb24gQ2hlY2tHZXQoKSB7DQoJCSRudW1fYmFkX3dvcmRzID0gMDsNCg0K CQlmb3JlYWNoKCRfR0VUIGFzICRjYW1wbyA9PiAkaW5wdXQpew0KCQkJJF9HRVRbJGNhbXBv XT0gZG9BcnJheSgkX0dFVFskY2FtcG9dLCAnaHRtbGVudGl0aWVzJyk7IC8vIFhTUyBQUk9U RUNUSU9ODQoNCgkJCWlmKCR0aGlzLT5pc0lkSW5qZWN0aW9uKCRjYW1wbywkaW5wdXQpKXsg Ly9TUUwgSUQgSU5KRUNUSU9ODQoJCQkJJG51bV9iYWRfd29yZHMgPQkkbnVtX2JhZF93b3Jk cyArIDAuNTsNCgkJCX0NCg0KCQkJJG51bV9iYWRfd29yZHMgPSAkbnVtX2JhZF93b3JkcyAr ICR0aGlzLT53b3JkRXhpc3RzKCRpbnB1dCk7IC8vU1FMIElOSkVDVElPTg0KCQl9DQoNCgkJ cmV0dXJuICRudW1fYmFkX3dvcmRzOw0KCX0NCg0KCS8qKg0KCSoJcmV0dXJuIHRydWUgaWYg aW5qZWN0aW9uIHNxbCB3b3JkIGlzIGZvdW5kLg0KCSoJVGhlIGlucHV0IGlzIHRlc3RlZCBp ZiBpcyBlcXVhbCB0byBhIHNxbCBpbmplY3Rpb24gcGF0dGVybg0KCSoJXGJbXmEtel0qP2Ry b3BbXmEtel0qP1xiDQoJKgkgaHR0cDovL3d3dy5wYWdlY29sdW1uLmNvbS90b29sL3JlZ3Rl c3QuaHRtDQoJKiovLyoJCSAiLyoiLCIrIgkJCQkqLw0KCXByaXZhdGUgZnVuY3Rpb24gd29y ZEV4aXN0cygkaW5wdXQpIHsNCgkJJG51bV9iYWRfd29yZHMgPSAwOw0KDQoJCS8qDQoJCSBX T1JEIEFGVEVSDQoJCSovDQoJCSRiYWRkZWxpbTEgPSAiW15hLXpdKiI7CS8vdGhlIGRlbGlt IHNob3VsZCBiZSBmcm9tICJhIiB0byAiYiIgYW55dGhpbmcgZWxzZSBpcyBjb25zaWRlcmVk IHNxbCBpbmplY3Rpb24gOikNCgkJJGJhZGRlbGltMiA9ICJbXmEtel0rIjsNCgkJJGJhZHdv cmRzPSBhcnJheSgidW5pb24iLCAic2VsZWN0IiwgInNob3ciLCAiaW5zZXJ0IiwgInVwZGF0 ZSIsICJkZWxldGUiLCAiZHJvcCIsICJ0cnVuY2F0ZSIsICJjcmVhdGUiLCAibG9hZF9maWxl IiwgImV4ZWMiLCAiIyIsICItLSIpOw0KCQkvLyIvKiINCgkJZm9yZWFjaCgkYmFkd29yZHMg YXMgJGJhZHdvcmQpIHsNCgkJCSRleHByZXNzaW9uID0gIi8iLiRiYWRkZWxpbTEuc3RydG9s b3dlcigkYmFkd29yZCkuJGJhZGRlbGltMi4iLyI7DQoJCQlpZiAocHJlZ19tYXRjaCAoJGV4 cHJlc3Npb24sIHN0cnRvbG93ZXIoJGlucHV0KSkpIHsNCi8vZG1wKCcqV0EqJywkYmFkd29y ZCwgJGlucHV0KTsNCgkJCQkvL2RpZSgic3FsIGluamVjdGlvbiEiKTsNCgkJCQkkbnVtX2Jh ZF93b3JkcysrOw0KCQkJfQ0KCQl9DQoNCgkJLyoNCgkJQkVGT1JFIFdPUkQNCgkJKi8NCgkJ JGJhZGRlbGltMSA9ICJbXmEtel0rIjsJLy90aGUgZGVsaW0gc2hvdWxkIGJlIGZyb20gImEi IHRvICJiIiBhbnl0aGluZyBlbHNlIGlzIGNvbnNpZGVyZWQgc3FsIGluamVjdGlvbiA6KQ0K CQkkYmFkZGVsaW0yID0gIlteYS16XSoiOw0KCQkkYmFkd29yZHM9IGFycmF5KCJAQHZlcnNp b24iLCAiQEBkYXRhZGlyIiwgInVzZXIiLCAidmVyc2lvbiIpOw0KDQoJCWZvcmVhY2goJGJh ZHdvcmRzIGFzICRiYWR3b3JkKSB7DQoJCQkkZXhwcmVzc2lvbiA9ICIvIi4kYmFkZGVsaW0x LnN0cnRvbG93ZXIoJGJhZHdvcmQpLiRiYWRkZWxpbTIuIi8iOw0KCQkJaWYgKHByZWdfbWF0 Y2ggKCRleHByZXNzaW9uLCBzdHJ0b2xvd2VyKCRpbnB1dCkpKSB7DQovL2RtcCgnKkJXKics JGJhZHdvcmQsICRpbnB1dCk7DQoJCQkJLy9kaWUoInNxbCBpbmplY3Rpb24hIik7DQoJCQkJ JG51bV9iYWRfd29yZHMrKzsNCgkJCX0NCgkJfQ0KDQoJCS8qDQoJCUJFRk9SRSBXT1JEIEFG VEVSDQoJCSovDQoJCSRiYWRkZWxpbTEgPSAiW15hLXpdKyI7CS8vdGhlIGRlbGltIHNob3Vs ZCBiZSBmcm9tICJhIiB0byAiYiIgYW55dGhpbmcgZWxzZSBpcyBjb25zaWRlcmVkIHNxbCBp bmplY3Rpb24gOikNCgkJJGJhZGRlbGltMiA9ICJbXmEtel0rIjsNCgkJJGJhZHdvcmRzPSBh cnJheSgiYmVuY2htYXJrIiwgIi0tIiwgInZhcmNoYXIiLCAiY29udmVydCIsICJjaGFyIiwg ImxpbWl0IiwgImluZm9ybWF0aW9uX3NjaGVtYSIsInRhYmxlX25hbWUiLCAiZnJvbSIsICJ3 aGVyZSIsICJvcmRlciIpOw0KDQoJCWZvcmVhY2goJGJhZHdvcmRzIGFzICRiYWR3b3JkKSB7 DQoJCQkkZXhwcmVzc2lvbiA9ICIvIi4kYmFkZGVsaW0xLnN0cnRvbG93ZXIoJGJhZHdvcmQp LiRiYWRkZWxpbTIuIi8iOw0KCQkJaWYgKHByZWdfbWF0Y2ggKCRleHByZXNzaW9uLCBzdHJ0 b2xvd2VyKCRpbnB1dCkpKSB7DQovL2RtcCgnKkItVy1BKicsJGJhZHdvcmQsICRpbnB1dCk7 DQoJCQkJLy9kaWUoInNxbCBpbmplY3Rpb24hIik7DQoJCQkJJG51bV9iYWRfd29yZHMrKzsN CgkJCX0NCgkJfQ0KLy9kbXAoJG51bV9iYWRfd29yZHMpOw0KCQlyZXR1cm4gJG51bV9iYWRf d29yZHM7DQoJfQ0KDQoJLyoqDQoJKglyZXR1cm4gdHJ1ZSBpZiBhbiBJRCBpcyBub3QgcmVh bGx5IGFuIElEDQoJKg0KCSoqLw0KCXByaXZhdGUgZnVuY3Rpb24gaXNJREluamVjdGlvbigk Y2FtcG8sJGlucHV0KSB7DQoJCSRyZWc9Ii9eaWQvIjsNCg0KCQlpZihwcmVnX21hdGNoKCRy ZWcsICRjYW1wbykpIHsNCgkJCWlmKCEkdGhpcy0+c3RyaW5nSXNOdW1iZXJOb3RaZXJvKCRp bnB1dCkpIHsNCgkJCQlyZXR1cm4gdHJ1ZTsJIC8vIGlmIGlzIElEIGFuZCBOT1QgSU5URUdF UiBvciBOVUxMIC0+IFNRTCBJTkpFQ1RJT04hIQ0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIGZh bHNlOw0KCX0NCg0KCS8qKg0KCSoJcmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIG51 bWJlciAoZGlmZmVyZW50IGZyb20gMCwgdGhlIGlkIGNvdWxkIG5vdCBiZSB6ZXJvISkNCgkq ICBUT0RPOiBjaGVjayBpZiAqYWxsKiBjaGFycyBhcmUgemVybyBhbmQgZmFpbCwgZS5nLiBp ZD0wMDAwDQoJKiovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzdHJpbmdJc051bWJlck5vdFplcm8o ICRzdHJpbmcgKSB7DQoJCWlmIChlbXB0eSgkc3RyaW5nKSkgew0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJCXJldHVybiBjdHlwZV9kaWdpdCgkc3RyaW5nKTsNCgl9DQp9IC8vZW5kIGNs YXNzDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNpZmlj IHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KLy8gVE9ETzog VGV4dHBhY2sgdGhpcw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2dUeHQoJHdoYXQsICRh dHRzID0gYXJyYXkoKSkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfcHJvZ25vc3RpY3NfZXZl bnQ7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2Fja2VkJyA9PiAnQWxhcm1zIGFja25vd2xlZGdl ZC4nLA0KCQknYWxhcm1fZnJlcScgPT4gJ0FsYXJtIG9uIGRldGVjdGlvbiBhbmQgZXZlcnk6 ICcsDQoJCSdhbmQnID0+ICcgYW5kICcsDQoJCSdhdXRoX3VzZXJzJyA9PiAnUmVzdHJpY3Qg cHJvZ25vc3RpYyBjb25maWcgdG86ICcsDQoJCSdhdmFpbF9icmFuY2gnID0+ICdBbiA8YSBo cmVmPSJodHRwOi8vdGV4dHBhdHRlcm4uY29tL2Rvd25sb2FkIj51cGRhdGUgdG8gdGhpcyBU ZXh0cGF0dGVybiBzZXJpZXMgaXMgYXZhaWxhYmxlPC9hPicsDQoJCSdhdmFpbF90eHAnID0+ ICdBIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20vZG93bmxvYWQiPm5ldyB2ZXJz aW9uIG9mIFRleHRwYXR0ZXJuIGlzIGF2YWlsYWJsZTwvYT4nLA0KCQknYmxvY2snID0+ICdC bG9jaycsDQoJCSdjaF9hZGQnID0+ICdBZGRpdGlvbnMnLA0KCQknY2hfZGVsJyA9PiAnRGVs ZXRpb25zJywNCgkJJ2NoX21vZCcgPT4gJ01vZGlmaWNhdGlvbnMnLA0KCQknY2hlY2tfYmV0 d2VlbicgPT4gJ0NoZWNrIGZpbGVzIGJldHdlZW46ICcsDQoJCSdjaGVja19mb3InID0+ICdD aGVjayBmaWxlcyBmb3I6ICcsDQoJCSdjaGVja19mcmVxJyA9PiAnQ2hlY2sgZmlsZXMgKGF0 IG1vc3QpIGV2ZXJ5OiAnLA0KCQknY2hlY2tfcXR5JyA9PiAnQ2hlY2sgdGhpcyBtYW55IGZp bGVzIGVhY2ggdGltZTogJywNCgkJJ2NoZWNrX3doZXJlJyA9PiAnQ2hlY2sgZmlsZXMgb24g cHVibGljIHNpZGUgY2xpY2tzOiAnLA0KCQknY3NpJyA9PiAnR2F0aGVyIGZvcmVuc2ljcyBh bmQgc2VuZCBmb3IgYW5hbHlzaXMnLA0KCQknY3NpX3NlbnQnID0+ICcgRm9yZW5zaWNzIGRh dGEgc2VudCcsDQoJCSdjc3YnID0+ICcoY29tbWEtc2VwYXJhdGVkKScsDQoJCSdjdXJybW9u JyA9PiAnWW91IGFyZSBjdXJyZW50bHkgbW9uaXRvcmluZyB7Y3Vycn0gb3V0IG9mIHtvdXRv Zn0gYXZhaWxhYmxlIGZpbGVzLicsDQoJCSdkb2Nyb290X2ZpbGVzJyA9PiAnQ29uc2lkZXIg bW92aW5nIHRoZSAiZmlsZXMiIGZvbGRlciBvdXRzaWRlIG9mIHlvdXIgc2l0ZSByb290IGZv bGRlci4gWW91IGNhbiBkbyB0aGlzIHZpYSB0aGUgIkFkbWluID4gUHJlZnMgPiBBZHZhbmNl ZCA+IEZpbGUgZGlyZWN0b3J5IHBhdGgiIHNldHRpbmcuJywNCgkJJ2RvY3Jvb3RfcHJvZ25v c3RpY3MnID0+ICdQbGVhc2UgY2hhbmdlIHRoZSAiUHJvZ25vc3RpY3MgZm9sZGVyIiBzZXR0 aW5nIHRvIGEgZGlyZWN0b3J5IG91dHNpZGUgeW91ciBzaXRlIHJvb3QgZm9sZGVyLicsDQoJ CSdkb2Nyb290X3RtcCcgPT4gJ0NvbnNpZGVyIG1vdmluZyB0aGUgInRtcCIgZm9sZGVyIG91 dHNpZGUgb2YgeW91ciBzaXRlIHJvb3QgZm9sZGVyLiBZb3UgY2FuIGRvIHRoaXMgdmlhIHRo ZSAiQWRtaW4gPiBQcmVmcyA+IEFkdmFuY2VkID4gVGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRo IiBzZXR0aW5nLicsDQoJCSdleGNsdWRpcicgPT4gJ0V4Y2x1ZGUgZm9sZGVyczogJywNCgkJ J2ZpbGVzX3VwZGF0ZWQnID0+ICdGaWxlIGxpc3QgdXBkYXRlZCcsDQoJCSdoZWxwX2xpbmsn ID0+ICcoPGEgaHJlZj0ie2xpbmt9Ij5IZWxwPC9hPiknLA0KCQknaG1zJyA9PiAnKGhyczpt aW5zOnNlY3MpJywNCgkJJ2lnbm9yZXMnID0+ICdJZ25vcmUgZmlsZXM6ICcsDQoJCSdsYmxf Y2hhbmdlZCcgPT4gJ0NoYW5nZWQnLA0KCQknbGJsX2hhc2htb2QnID0+ICdDT01QUk9NSVNF RCcsDQoJCSdsYmxfbWlzc2luZycgPT4gJ01pc3NpbmcnLA0KCQknbGJsX2FkZGVkJyA9PiAn QWRkZWQgKG5vdCBtb25pdG9yZWQpJywNCgkJJ2xpc3Rsb2MnID0+ICdGaWxlIGxvY2F0aW9u czogJywNCgkJJ21haWx0bycgPT4gJ1NlbmQgZS1tYWlsIHRvOiAnLA0KCQknbWFpbHRvX2Nz aScgPT4gJ1NlbmQgZm9yZW5zaWNzIHRvOiAnLA0KCQknbW9uZmlsZXNfZXhwbGFpbicgPT4g J1NlbGVjdCBhbGwgdGhlIGZpbGVzIHlvdSB3aXNoIHRvIG1vbml0b3IgYW5kIGNsaWNrIFNh dmUuIEFsdGVyaW5nIHRoaXMgbGlzdCB3aWxsIGF1dG9tYXRpY2FsbHkgYWNrbm93bGVkZ2Ug YW55IG91dHN0YW5kaW5nIGFsYXJtcyBhZ2FpbnN0IHRoZSBzZWxlY3RlZCBmaWxlcy4nLA0K CQknbm9fYWxhcm1zJyA9PiAnTm8gYWxhcm1zIHRvIGFja25vd2xlZGdlIGF0IHByZXNlbnQu JywNCgkJJ25vX2ZpbGVzJyA9PiAnTm8gZmlsZXMgdG8gbGlzdC4gQ2hlY2sgdGhlIHBsdWdp biBzZXR1cCAoYW5kIFNhdmUgaXQpLicsDQoJCSdub19sb2dfZW50cmllcycgPT4gJ05vIGxv ZyBhY3Rpdml0eSBhcm91bmQgdGhlIHRpbWUgb2YgdGhlIGRpZmZlcmVuY2VzLicsDQoJCSdu b25lX3NlbGVjdGVkJyA9PiAnTm8gZmlsZXMgc2VsZWN0ZWQnLA0KCQknbm90X3dyaXRhYmxl JyA9PiAne2xvY2F0aW9ufSBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgaXMgbm90IHdyaXRhYmxl JywNCgkJJ25vdGlmeV9lbWFpbCcgPT4gJ0UtbWFpbCcsDQoJCSdub3RpZnlfdHhwJyA9PiAn VFhQIGludGVyZmFjZScsDQoJCSdub3RpZnlfdmlhJyA9PiAnTm90aWZ5IHZpYTogJywNCgkJ J3ByZWFtYmxlX2FkZGVkJyA9PiAnVGhlc2UgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkOiAnLA0K CQkncHJlYW1ibGVfZmlsZXMnID0+ICdGaWxlIGNvbnRlbnRzIGZvbGxvd3M6ICcsDQoJCSdw cmVhbWJsZV9oYXNoZG93bicgPT4gJ1dBUk5JTkchIFRoZSBjaGVja3N1bXMgZmlsZSBpcyBt aXNzaW5nLicsDQoJCSdwcmVhbWJsZV9oYXNobW9kJyA9PiAnV0FSTklORyEgVGhlIGNoZWNr c3VtcyBmaWxlIGhhcyBiZWVuIGFsdGVyZWQ6ICcsDQoJCSdwcmVhbWJsZV9taXNzJyA9PiAn VGhlc2UgZmlsZXMgYXJlIG1pc3Npbmc6ICcsDQoJCSdwcmVhbWJsZV9ub2snID0+ICdUaGVz ZSBmaWxlcyBkaWZmZXIgZnJvbSB0aGVpciBleHBlY3RlZCBjb250ZW50OiAnLA0KCQkncHJl YW1ibGVfc3FsX2luamVjdCcgPT4gJ1Bvc3NpYmxlIFNRTCBpbmplY3Rpb24gZGV0ZWN0ZWQn LA0KCQkncHJlYW1ibGVfdHhwbG9nJyA9PiAnTG9nIGVudHJpZXMgcHJpb3IgdG8gdGhpcyBk ZXRlY3Rpb246ICcsDQoJCSdwcm9nbG9jJyA9PiAnUHJvZ25vc3RpY3MgZm9sZGVyOiAnLA0K CQkncHJvZ3BmeCcgPT4gJ1VuaXF1ZSBwcmVmaXg6ICcsDQoJCSdwbmxfYWNrJyA9PiAnQWxh cm1zJywNCgkJJ3BubF9hY2tpdCcgPT4gJ0Fja25vd2xlZGdlJywNCgkJJ3BubF9hZHZpY2Un ID0+ICdBZHZpY2UnLA0KCQkncG5sX2NzaScgPT4gJ1NlbmQgRm9yZW5zaWNzJywNCgkJJ3Bu bF9maWxlcycgPT4gJ0ZpbGVzJywNCgkJJ3BubF9pZ25vcmUnID0+ICdJZ25vcmUnLA0KCQkn cG5sX3NldHVwJyA9PiAnU2V0dXAnLA0KCQkncG9zdGFtYmxlJyA9PiAnQWNrbm93bGVkZ2Ug YWxhcm1zJywNCgkJJ3JlcV9oZWFkZXJzJyA9PiAnQmxvY2sgcmVxdWVzdCBoZWFkZXJzOiAn LA0KCQkncmVxX25vdF9hbGxvd2VkJyA9PiAnUkVRVUVTVF9NRVRIT0Qgbm90IGFsbG93ZWQ6 IHtyZXF9JywNCgkJJ3JoX2RlbCcgPT4gJ0RFTEVURScsDQoJCSdyaF9wdXQnID0+ICdQVVQn LA0KCQkncmhfdHJhY2UnID0+ICdUUkFDRScsDQoJCSd0dGxfYWNrJyA9PiAnUHJvZ25vc3Rp YyBhbGFybSBhY2tub3dsZWRnZW1lbnQnLA0KCQkndHRsX2FkdmljZScgPT4gJ1Byb2dub3N0 aWMgYWR2aWNlJywNCgkJJ3R0bF9maWxlcycgPT4gJ1Byb2dub3N0aWMgZmlsZSBtb25pdG9y aW5nJywNCgkJJ3R0bF9maWxlb3B0cycgPT4gJ0ZpbGVzeXN0ZW0gb3B0aW9ucycsDQoJCSd0 dGxfbW9ub3B0cycgPT4gJ01vbml0b3Jpbmcgb3B0aW9ucycsDQoJCSd0dGxfcGx1Z29wdHMn ID0+ICdQbHVnaW4gb3B0aW9ucycsDQoJCSd0dGxfcmVhbG9wdHMnID0+ICdSZWFsdGltZSBv cHRpb25zJywNCgkJJ3R0bF9zZXR1cCcgPT4gJ1Byb2dub3N0aWMgc2V0dXAnLA0KCQkncnBj X2V4aXN0cycgPT4gJ1RoZSBycGMgZGlyZWN0b3J5IGlzIG5vdCBiZWluZyB1c2VkLiBDb25z aWRlciByZW1vdmluZyBpdC4nLA0KCQkncnRfaGRyJyA9PiAnSGVhZGVyIHZpb2xhdGlvbnMn LA0KCQkncnRfc3FsJyA9PiAnU1FMIGluamVjdGlvbnMnLA0KCQknc2Vjb25kcycgPT4gJyhz ZWNvbmRzKScsDQoJCSdzZW5kX2ZvcmVuc2ljcycgPT4gJ1NlbmQgZm9yZW5zaWNzIGZvcjog JywNCgkJJ3NldHVwX2V4aXN0cycgPT4gJ1RoZSBzZXR1cCBkaXJlY3Rvcnkgc3RpbGwgZXhp c3RzLiBQbGVhc2UgZGVsZXRlIGl0LicsDQoJCSdzbWRfcHJvZ25vc3RpY3MnID0+ICdQcm9n bm9zdGljcycsDQoJCSdzaG93X2dyYW50cycgPT4gJ1lvdXIgVFhQIHVzZXIgY2FuIGFjY2Vz cyB0aGUgTXlTUUwgcHJpdmlsZWdlcyBpbiB0aGUgREIuIENvbnNpZGVyIGFjY2Vzc2luZyB0 aGUgREIgdXNpbmcgYSBsZXNzIHByaXZpbGVnZWQgdXNlci4nLA0KCQknc3FsX2ZpbGVfcHJp dnMnID0+ICdZb3VyIE15U1FMIHVzZXIgaGFzIEZJTEUgcHJpdmlsZWdlcy4gQ29uc2lkZXIg cmV2b2tpbmcgdGhpcyByaWdodCB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3NhcnkuJywNCgkJ J3NxbF9pbmplY3QnID0+ICdQcm90ZWN0IGFnYWluc3QgU1FMIGluamVjdGlvbjogJywNCgkJ J3N0YXRfZ2lkJyA9PiAnR3JvdXAgSUQ6ICcsDQoJCSdzdGF0X21vZCcgPT4gJ01vZGlmaWVk OiAnLA0KCQknc3RhdF9uYW1lJyA9PiAnRmlsZW5hbWU6ICcsDQoJCSdzdGF0X3NpemUnID0+ ICdTaXplOiAnLA0KCQknc3RhdF91aWQnID0+ICdVc2VyIElEOiAnLA0KCQknc3ViamVjdCcg PT4gJ1Byb2dub3N0aWNzICgnLiRwcmVmc1snc2l0ZXVybCddLicpJywNCgkJJ3N1YmplY3Rf Y3NpJyA9PiAnUHJvZ25vc3RpY3MgKCcuJHByZWZzWydzaXRldXJsJ10uJykgZm9yZW5zaWNz JywNCgkJJ3RpZ2h0JyA9PiAnWW91IHJ1biBhIHByZXR0eSB0aWdodCBzaGlwLiBTdGF5IGZy b3N0eS4nLA0KCQkndHhwZGlyJyA9PiAnQWRtaW4tc2lkZSBVUkw6ICcsDQoJCSd3YXJuX2xv YycgPT4gJ0ZpbGUgbG9jYXRpb25zIGNoYW5nZWQuIFVwZGF0ZSB5b3VyIDxhIGhyZWY9Imlu ZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRf cHJvZ25vc3RpY3NfZmlsZXMiPmxpc3Qgb2YgZmlsZXM8L2E+IG5vdycsDQoJCSd3aXRoJyA9 PiAnIHdpdGg6ICcsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7 DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiIxIjtzOjU6ImZsYWdz IjtzOjE6IjEiO3M6NDoiaGVscCI7czoyNjQwMjoiPGRpdiBpZD0ic21kX2hlbHAiPgoKCTxo MT5zbWRfcHJvZ25vc3RpY3M8L2gxPgoKCTxwPlRoZSA8ZW0+QWRtaW4gLSZndDsgRGlhZ25v c3RpY3M8L2VtPiB0YWIgaXMgZ3JlYXQgaWYgeW91IHJlbWVtYmVyIHRvIGxvb2sgYXQgaXQg ZnJvbSB0aW1lIHRvIHRpbWUuIEJ1dCBpZiB5b3VyIHNlcnZlciBpcyBjb21wcm9taXNlZCwg aG93IHdvdWxkIHlvdSBrbm93IGFib3V0IGEgc25lYWt5IFRyb2phbiBvciBtYWx3YXJlIHVu dGlsIHlvdXIgdmlzaXRvcnMgY29tcGxhaW4gb3IgdGhlIHNlYXJjaCBlbmdpbmVzIGJsb2Nr IHlvdXIgc2l0ZT88L3A+CgoJPHA+VGhlIGFuc3dlciBpcyB0byB1c2Ugc21kX3Byb2dub3N0 aWNzIHRvIHRlbGwgeW91IHdoZW4gdGhpbmdzIGhhdmUgY2hhbmdlZCBzbyB5b3UgY2FuIHRh a2UgYWN0aW9uIGltbWVkaWF0ZWx5LjwvcD4KCgk8aDI+RmVhdHVyZXM8L2gyPgoKCTx1bD4K CQk8bGk+TW9uaXRvciBmaWxlcyBhbmQgYXR0YWNrcyBpbiBhbmQgYXJvdW5kIHlvdXIgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW5zdGFsbGF0aW9uPC9saT4KCQk8bGk+QXV0 b21hdGljYWxseSBkZXRlY3QgYW55IGNoYW5nZXMgYW5kIGRpc3BsYXkvc2VuZCBub3RpZmlj YXRpb24gdG8gZGVzaWduYXRlZCB1c2VyKHMpPC9saT4KCQk8bGk+Q3VzdG9taXNlIHdoZXJl YWJvdXRzIGFuZCBob3cgb2Z0ZW4gdGhlIGNoZWNrcyBhcmUgcGVyZm9ybWVkPC9saT4KCQk8 bGk+QWNrbm93bGVkZ2Uga25vd24gYWx0ZXJhdGlvbnMgYW5kIGNvbmZpZ3VyZSByZXBlYXQg YWxhcm1zIGlmIHRoZSBzaXR1YXRpb24gcmVtYWlucyB1bmNoZWNrZWQ8L2xpPgoJCTxsaT5S dWRpbWVudGFyeSBwYXNzd29yZCBzdHJlbmd0aCBtZXRlciBpbmNsdWRlZDwvbGk+Cgk8L3Vs PgoKCTxoMj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD5Xcml0dGVuIGJ5IDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT4uIE1hbnkg dGhhbmtzIHRvIEtldmluIFBvdHRzIGFuZCBTdGV2ZSBEaWNraW5zb24gZm9yIGJldGEgdGVz dGluZyBhbmQgZmVhdHVyZSBlbmhhbmNlbWVudHMuIEFsc28ga3Vkb3MgdG8gc21hbGxoYWRy b25jb2xsaWRlciBmb3IgdGhlIGJhc2lzIG9mIHRoZSBwYXNzd29yZCBzdHJlbmd0aCBjYWxj dWxhdG9yIGFuZCBIdWdvIFNvdXNhIGZvciB0aGUgcGhQcm90ZWN0b3IgY2xhc3MuPC9wPgoK CTxoMj5JbnN0YWxsYXRpb24gLyB1bmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9Imlt cG9ydGFudCI+UmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4zLjAr IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1PC9wPgoKCTxwPkRvd25sb2Fk IHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9y Zy9wbHVnaW5zLzExOTUvc21kX3Byb2dub3N0aWNzIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBv ciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdl PC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhl IHBsdWdpbi4gTm90ZSB0aGF0IGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHBsdWdpbiBy dW5zIGFzIHByaW9yaXR5IDEgc28gaXQgY2FuIGRldGVjdCB0aGluZ3MgYmVmb3JlIG90aGVy IHBsdWdpbnMuPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgZGVsZXRlIGZyb20gdGhlIDxlbT5B ZG1pbiAtJmd0OyBQbHVnaW5zPC9lbT4gcGFnZS4gWW91IG1heSB1c2Ugc21kX3ByZWZhbGl6 ZXIgdG8gcmVtb3ZlIGFueSA8Y29kZT5zbWRfcHJvZ25vc3RpY3NfKjwvY29kZT4gcHJlZmVy ZW5jZXMgdGhhdCB0aGUgcGx1Z2luIGNyZWF0ZWQuPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBo cmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzQ5 MzgiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhl IHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxoMj5RdWljayBz dGFydDogdGhlIHRocmVlIHN0ZXBzIHRvIGRldGVjdGlvbjwvaDI+CgoJPG9sPgoJCTxsaT5W aXNpdCA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBQcm9nbm9zdGljczwvZW0+LCBhbHRlciB0aGUg c2V0dXAgaW5mb3JtYXRpb24gdG8gdGFzdGUgYW5kIDxzdHJvbmc+bWFrZSBzdXJlIHlvdSA8 ZW0+U2F2ZTwvZW0+IGl0PC9zdHJvbmc+PC9saT4KCQk8bGk+Q2xpY2sgdGhlIFByb2dub3N0 aWMgdGFiJiM4MjE3O3MgPGVtPkZpbGVzPC9lbT4gYnV0dG9uIChpZ25vcmUgYW55IHdhcm5p bmcgYWJvdXQgbWlzc2luZyBjaGVja3N1bXMgZm9yIG5vdzogdGhleSYjODIxNzt2ZSBub3Qg YmVlbiBjcmVhdGVkIHlldCkgYW5kIGNob29zZSB0aGUgZmlsZXMgeW91IHdpc2ggdG8gbW9u aXRvci4gPHN0cm9uZz5NYWtlIHN1cmUgeW91IDxlbT5TYXZlPC9lbT4gdGhlIGNoYW5nZXM8 L3N0cm9uZz48L2xpPgoJCTxsaT5HbyBhYm91dCB5b3VyIGJ1c2luZXNzLiBJZiB0aGUgZmls ZXN5c3RlbSBjaGFuZ2VzIHlvdSYjODIxNztsbCBiZSB0b2xkIGFib3V0IGl0LiBQbGVhc2Ug Y29uc2lkZXIgaGVscGluZyB0byA8YSBocmVmPSIjc21kX3Byb2doZWxwX2JldHRlciI+bWFr ZSB0aGUgcGx1Z2luIGJldHRlcjwvYT48L2xpPgoJPC9vbD4KCgk8aDIgaWQ9InNtZF9wcm9n aGVscF9zZXR1cCI+U2V0dXA8L2gyPgoKCTxwPlRoZSA8ZW0+UHJvZ25vc3RpYyBzZXR1cDwv ZW0+IHBhZ2UgaG91c2VzIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOjwv cD4KCgk8aDM+TW9uaXRvcmluZyBvcHRpb25zPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5DaGVjayBmaWxlcyBvbiBwdWJsaWMgc2lkZSBjbGlja3M8L3NwYW4+IDog Y2hlY2tzIGFyZSBhbHdheXMgcGVyZm9ybWVkIHdoZW4gcGVvcGxlIHZpc2l0IGFkbWluIHNp ZGUgdGFicy4gWW91IG1heSBhbHNvIGVsZWN0IHRvIGNoZWNrIHRoZSBmaWxlcyB3aGVuIHZp c2l0b3JzL2JvdHMgYnJvd3NlIHlvdXIgd2ViIHNpdGUgaWYgeW91IHByZWZlciAoc2VlIDxh IGhyZWY9IiNzbWRfcHJvZ2hlbHBfaG93aXR3b3JrcyI+aG93IGl0IHdvcmtzPC9hPiBmb3Ig ZGV0YWlscykuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNoZWNrIGZpbGVzIChh dCBtb3N0KSBldmVyeTwvc3Bhbj4gOiB0aGUgcGx1Z2luIGRvZXMgbm90IGNoZWNrIHRoZSBm aWxlcyBldmVyeSBjbGljayBiZWNhdXNlIHRoYXQgd291bGQgcGxhY2UgdW5uZWNlc3Nhcnkg c3RyYWluIG9uIHRoZSBzZXJ2ZXIuIEluc3RlYWQgeW91IGNob29zZSBhIGNvbmZpZ3VyYWJs ZSB0aW1lICYjODIxMjsgaW4gc2Vjb25kcyAmIzgyMTI7IGFmdGVyIHdoaWNoIHRoZSB2ZXJ5 IG5leHQgYWRtaW4tIG9yIHB1YmxpYy1zaWRlIGNsaWNrIHdpbGwgdHJpZ2dlciB0aGUgY2hl Y2suPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNoZWNrIGZpbGVzIGJldHdlZW48 L3NwYW4+IDogdHdvIHRpbWVzIG9mIGRheSBiZXR3ZWVuIHdoaWNoIHRoZSBmaWxlcyB3aWxs IGJlIGNoZWNrZWQuIFlvdSBjb3VsZCBzZXQgdGhpcyB0byBvZmYtcGVhayBob3VycyBpZiB5 b3UgcHJlZmVycmVkIHRvIG1pbmltaXNlIHRoZSBwbHVnaW4mIzgyMTc7cyBpbXBhY3Qgb24g ZGF5dGltZSB2aXNpdG9ycy4gRGVmYXVsdDogPGNvZGU+MDA6MDAgPSZndDsgMjM6NTk8L2Nv ZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNoZWNrIHRoaXMgbWFueSBmaWxl cyBlYWNoIHRpbWU8L3NwYW4+IDogaW5zdGVhZCBvZiB0ZXN0aW5nIGV2ZXJ5IHNpbmdsZSBm aWxlIGVhY2ggdGltZSAmIzgyMTI7IHdoaWNoIHdpbGwgc2xvdyBkb3duIHlvdXIgc2l0ZSAv IGFkbWluIHNpZGUgJiM4MjEyOyBpdCBpcyBnb29kIHByYWN0aWNlIHRvIG9ubHkgY2hlY2sg YSBzdWJzZXQgb2YgZmlsZXMgZXZlcnkgdGltZSB0aGUgcGx1Z2luIGlzIHRyaWdnZXJlZC48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWxhcm0gb24gZGV0ZWN0aW9uIGFuZCBl dmVyeTwvc3Bhbj4gOiB3aGVuIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBhbmQgaXQmIzgyMTc7 cyBkZXRlY3RlZCwgYW4gYWxhcm0gYWN0aW9uIGlzIGFsd2F5cyB0YWtlbi4gQnV0IGlmIHRo ZSBwbHVnaW4gY29udGludWFsbHkgYm9tYmFyZGVkIHlvdSB3aXRoIGluZm9ybWF0aW9uIGl0 IHdvdWxkIGJlIGFubm95aW5nIGFuZCBub3QgYXMgdXNlZnVsLiBUaGlzIHNldHRpbmcgYWxs b3dzIHlvdSB0byBjb25maWd1cmUgdGhlIGludGVydmFsIGJldHdlZW4gcmVwZWF0IG5hZ3Mg b2YgdGhlIHNhbWUgbWVzc2FnZS4gT25jZSBhIGRheSAodGhlIGRlZmF1bHQgb2YgODY0MDAg c2Vjb25kcykgYnkgZS1tYWlsIGlzIHVzdWFsbHkgZW5vdWdoIHVubGVzcyB5b3UmIzgyMTc7 cmUgYSBtYXNvY2hpc3QuIE5vdGUgdGhhdCBpZiBtb3JlIGZpbGVzIGFyZSBjaGFuZ2VkICYj ODIxMjsgZXZlbiB3aGVuIHRoZSB0aW1lb3V0IHBlcmlvZCBoYXMgeWV0IHRvIGVsYXBzZSAm IzgyMTI7IHlvdSB3aWxsIHJlY2VpdmUgYW5vdGhlciBhbGVydC48ZGl2IGNsYXNzPSJzbWRf YnJlYWsiPllvdSBtYXkgc3BlY2lmeSB0d28gdmFsdWVzIChjb21tYS1zZXBhcmF0ZWQpIGlm IHlvdSB3aXNoOiB0aGUgZmlyc3QgaXMgdGhlIHRpbWUgYmV0d2VlbiBub3RpZmljYXRpb25z IHRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhZG1pbiBzaWRlOyB0aGUg c2Vjb25kIGlzIHRoZSB0aW1lIGJldHdlZW4gZS1tYWlscy4gSWYgeW91IHVzZSBvbmx5IG9u ZSB2YWx1ZSB0aGVuIGl0IHdpbGwgYmUgYXBwbGllZCB0byBib3RoLjwvZGl2PjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5Ob3RpZnkgdmlhPC9zcGFuPiA6IGNob29zZSBob3cg eW91IHdpc2ggdG8gYmUgbm90aWZpZWQ6Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IEludGVyZmFjZSB3aWxsIGRpc3BsYXkgYSBtZXNzYWdlIG9uIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhZG1pbiBzaWRlIHdoZW4gYSBjaGFuZ2Ug aXMgZGV0ZWN0ZWQuPC9saT4KCQk8bGk+RS1tYWlsIHdpbGwgc2VuZCBvdXQgYW4gZS1tYWls IGFib3V0IHRoZSBjaGFuZ2VzLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5TZW5kIGUtbWFpbCB0bzwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBv ZiBlLW1haWwgYWRkcmVzcyByZWNpcGllbnRzLiBJZiB0aGlzIGlzIGVtcHR5IG5vIGUtbWFp bHMgd2lsbCBiZSBzZW50IGV2ZW4gaWYgeW91IGNob29zZSB0byBiZSBub3RpZmllZCB2aWEg ZS1tYWlsLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5TZW5kIGZvcmVuc2ljcyB0 bzwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBlLW1haWwgYWRkcmVzcyByZWNp cGllbnRzIHRvIHJlY2VpdmUgZm9yZW5zaWNzIGRhdGEgKHRoZSBuYXR0aWx5LXRpdGxlZCA8 ZW0+ZnJvZ25vc3RpY3M8L2VtPikuIFlvdSBjYW4gY2hvb3NlIG5vYm9keSBpZiB5b3Ugd2lz aCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgb3Igc2VuZCB0aGVtIHRvIHlvdXJzZWxmLCBv ciA8YSBocmVmPSIjc21kX3Byb2doZWxwX2JldHRlciI+dG8gbWUgZm9yIGFuYWxheXNpczwv YT4uIDxzdHJvbmc+UGxlYXNlIG5vdGUgdGhhdCBzb21lIGRhdGEgaXMgcXVpdGUgc2Vuc2l0 aXZlIGFuZCBtYXkgZGl2dWxnZSBwYXRocyB0byB5b3VyIGZpbGVzIG9yIHNpdGU8L3N0cm9u Zz4uIElmIHlvdSBwcmVmZXIgdG8ga2VlcCBzdHVmZiBwcml2YXRlIGJ5IGFsbCBtZWFucyBz YW5pdGl6ZSB0aGUgZm9yZW5zaWNzIGFuZCBzZW5kIHRoZSBlZGl0ZWQgaGlnaGxpZ2h0cyB0 byBtZSBmb3IgYW5hbHlzaXMgaWYgeW91IHdpc2guPC9saT4KCTwvdWw+CgoJPGgzPlJlYWx0 aW1lIG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkJsb2Nr IHJlcXVlc3QgaGVhZGVyczwvc3Bhbj4gOiBpZiB5b3UgZW5hYmxlIHRoaXMgZmFjaWxpdHkg eW91IGNhbiBlbGVjdCB0byBibG9jayBvciBhbGxvdyBjZXJ0YWluIHR5cGVzIG9mIHNwZWlj YWwgPHNwYW4gY2xhc3M9ImNhcHMiPkhUVFA8L3NwYW4+IHJlcXVlc3QuIEFueSByZXF1ZXN0 IG9mIGEgY2hlY2tlZCB0eXBlIHdpbGwgYmUgYmxvY2tlZCBhbmQgYSBtZXNzYWdlIHdpbGwg YmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgcGFnZS4gVGhlIGNvcmUgdHlwZXMgPHNwYW4g Y2xhc3M9ImNhcHMiPkdFVDwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5QT1NUPC9zcGFu PiwgPHNwYW4gY2xhc3M9ImNhcHMiPkhFQUQ8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iY2Fw cyI+T1BUSU9OUzwvc3Bhbj4gYXJlIGF1dG9tYXRpY2FsbHkgYWxsb3dlZCBiZWNhdXNlIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHJlcXVpcmVzIHRoZW0uIFRoZSByZW1haW5p bmcgdGhyZWUgJiM4MjEyOyA8c3BhbiBjbGFzcz0iY2FwcyI+VFJBQ0U8L3NwYW4+LCA8c3Bh biBjbGFzcz0iY2FwcyI+UFVUPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImNhcHMiPkRFTEVU RTwvc3Bhbj4gJiM4MjEyOyBhcmUgc3BlY2lhbGlzdCBoZWFkZXJzIHRoYXQgYXJlbiYjODIx Nzt0IHVzZWQgYnkgdGhlIGNvcmUgYnV0IG1heSBiZSByZXF1aXJlZCBieSBzb21lIHBsdWdp bnMuIFBlcm1pdCB0aGVtIGlmIHlvdSB3aXNoIGJ5IGNsZWFyaW5nIHRoZSByZWxldmFudCBj aGVjayBib3goZXMpLCBvdGhlcndpc2UgZm9yIG1heGltdW0gcHJvdGVjdGlvbiBrZWVwIHRo aXMgZmVhdHVyZSBzd2l0Y2hlZCBvbiB3aXRoIGFsbCB0aHJlZSB0eXBlcyBvZiBoZWFkZXIg Y2hlY2tlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UHJvdGVjdCBhZ2FpbnN0 IDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlvbjwvc3Bhbj4gOiBtb25p dG9yIGluY29taW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBmb3IgPHNwYW4g Y2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gaW5qZWN0aW9uIGF0dGFja3MgYW5kIGRlYWwgd2l0 aCB0aGVtIGluIGEgdmFyaWV0eSBvZiB3YXlzLiBXaGVuIGFuIGF0dGFjayBpcyBkZXRlY3Rl ZCB0aGUgcmVxdWVzdCBjYW4gYmUgPGNvZGU+QmxvY2s8L2NvZGU+ZWQgb3IgeW91IGNhbiBz ZW5kIGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiBzdGF0dXMgaGVhZGVyIHNv IHlvdSBjYW4gZGVhbCB3aXRoIHRoZSBhdHRhY2sgb24geW91ciBlcnJvciBwYWdlcy4gSWYg eW91IHR5cGUgYW55dGhpbmcgaW4gdGhlIDxjb2RlPndpdGg8L2NvZGU+IGJveCwgdGhlIGdp dmVuIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGhlIHBhZ2UuIFlvdSBtYXkgc3Bl Y2lmeSA8Y29kZT50eHBfZm9ybTpuYW1lLW9mLWZvcm08L2NvZGU+IGluIHRoZSA8Y29kZT53 aXRoPC9jb2RlPiBib3ggdG8gaGFuZCBvZmYgY29udHJvbCB0byBhIGN1c3RvbSBmb3JtIGZp cnN0IGJlZm9yZSB0aGUgcmVzdWx0IGlzIHRocm93biB0byB0aGUgcGFnZS4gWW91IGNvdWxk IHVzZSB0aGlzLCBmb3IgZXhhbXBsZSwgdG8gbWFpbCBvZmYgeW91ciBvd24gZGlhZ25vc3Rp Y3Mgb3IgdG8gbWFrZSBhIGRlY2lzaW9uIG9uIHdoZXRoZXIgdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5TUUw8L3NwYW4+IGF0dGFjayB3YXMgbGVnaXRpbWF0ZSBvciBub3QgYW5kIGVpdGhl ciBibG9jayBpdCB5b3Vyc2VsZiBvciBzdHJpcCBvdXQgYW55dGhpbmcgZG9kZ3kgYW5kIHNl bmQgdGhlIHJlcXVlc3Qgb24uIElmIHlvdSB3aXNoIHRvIGdvIGZ1cnRoZXIsIHRoZXJlIGlz IGEgPGEgaHJlZj0iI3NtZF9wcm9naGVscF9jYWxsYmFja3MiPmNhbGxiYWNrIGF2YWlsYWJs ZTwvYT48L2xpPgoJPC91bD4KCgk8aDM+RmlsZXN5c3RlbSBvcHRpb25zPC9oMz4KCgk8dWw+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5DaGVjayBmaWxlcyBmb3I8L3NwYW4+IDogY2hv b3NlIHdoYXQgdHlwZSBvZiBhbHRlcmF0aW9ucyB5b3Ugd2lzaCB0byBtb25pdG9yOiBuZXcg ZmlsZXMgYWRkZWQsIGZpbGVzIGRlbGV0ZWQgb3IgZmlsZXMgbW9kaWZpZWQuIEJ5IGRlZmF1 bHQsIGFkZGl0aW9ucyBhcmUgbm90IHNlbGVjdGVkIGJlY2F1c2UgaXQgaW5jdXJzIGEgKHRp bnkpIGV4dHJhIHByb2Nlc3NpbmcgcGVuYWx0eSB0byB0aGUgY2hlY2tzLiBUaGVyZWZvcmUg aWYgeW91IHdhbnQgdG8gbW9uaXRvciBmb3IgYWRkaXRpb25zLCB5b3UgbmVlZCB0byBvcHQt aW4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkZpbGUgbG9jYXRpb25zPC9zcGFu PiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggeW91 IHdpc2ggdG8gYmUgYWJsZSB0byBzZWxlY3QgZmlsZXMgZm9yIG1vbml0b3JpbmcuIENob29z ZSBvbmx5IHRoZSB0b3AtbGV2ZWwgZm9sZGVyOyBldmVyeXRoaW5nIGJlbmVhdGggd2lsbCBh dXRvbWF0aWNhbGx5IGJlIHNlbGVjdGVkLiBJdCBkZWZhdWx0cyB0byB5b3VyIHNpdGUgcm9v dC4gSWYgdXNpbmcgYSBtdWx0aS1zaXRlIHNldHVwIHlvdSBtYXkgaGF2ZSB0byBhbHRlciB0 aGlzLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FeGNsdWRlIGZvbGRlcnM8L3Nw YW4+IDogc2luY2UgdGhlIGxpc3Qgb2YgZmlsZXMgdW5kZXIgeW91ciBUZXh0cGF0dGVybiBp bnN0YWxsYXRpb24gbWF5IHBvdGVudGlhbGx5IGJlIGxhcmdlIHlvdSBjYW4gZGVzaWduYXRl IHNvbWUgZm9sZGVycyB0byBiZSBhdXRvbWF0aWNhbGx5IGV4Y2x1ZGVkLCB3aGljaCBtYWtl cyB0aGUgZmlsZSBsaXN0IHNob3J0ZXIuIERlZmF1bHQ6IDxjb2RlPmltYWdlcywgZmlsZXMs IHRtcDwvY29kZT4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPklnbm9yZSBmaWxl czwvc3Bhbj4gOiBzb21lIGZpbGVzLCBzdWNoIGFzIHRoZSBlcnJvcl9sb2cgZmlsZSBvbiB0 eXBpY2FsIExpbnV4IGhvc3RzLCBwb3AgdXAgdW5hbm5vdW5jZWQgYW5kIHlvdSBtYXkgcGVy aW9kaWNhbGx5IGRlbGV0ZSB0aGVtLiBPbiBkZXZlbG9wbWVudCBzaXRlcyB0aGlzIGNhbiBj YXVzZSBleGNlc3NpdmUgYWxhcm1zIGR1cmluZyBkZWJ1Z2dpbmcuIFRvIG1pbmltaXNlIHRo aXMsIHlvdSBjYW4gbGlzdCBmaWxlcyBoZXJlIHRoYXQgeW91IGFsd2F5cyB3aXNoIHRvIGln bm9yZS4gTm8gcGF0aHMgYXJlIG5lY2Vzc2FyeToganVzdCBzdXBwbHkgYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiBmaWxlIG5hbWVzLiBXaWxkY2FyZHMgKCogYW5kID8pIGFyZSBwZXJt aXNzYWJsZS4gTm90ZSB0aGF0IHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZSBpcyBh bHdheXMgdHJlYXRlZCBhcyBhIHNwZWNpYWwgY2FzZSBzbyB0aGVyZSYjODIxNztzIG5vIG5l ZWQgdG8gbGlzdCBpdCBleHBsaWNpdGx5LjwvbGk+Cgk8L3VsPgoKCTxoMz5QbHVnaW4gb3B0 aW9uczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UmVzdHJpY3QgcHJv Z25vc3RpY3MgY29uZmlnIHRvPC9zcGFuPiA6IGlmIHlvdSBoYXZlIHRvIGlzc3VlIFB1Ymxp c2hlciAvIE1hbmFnaW5nIEVkaXRvciBwcml2cyB0byBzb21lb25lIGVsc2UgYXMgd2VsbCBh cyB5b3Vyc2VsZiBidXQgZG9uJiM4MjE3O3Qgd2FudCBhbnlvbmUgbWVzc2luZyB3aXRoIHRo ZSBwbHVnaW4gc2V0dGluZ3MsIHB1dCBhIGxpc3Qgb2YgcGVybWl0dGVkIHVzZXIgbmFtZXMg aW4gdGhpcyBib3guIDxzcGFuIGNsYXNzPSJpbXBvcnRhbnQiPkJlIGNhcmVmdWwuIFRoZSBu YW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgYW5kIGlmIHlvdSBtaXNzcGVsbCBhIG5hbWUgeW91 IGNhbiBsb2NrIHlvdXJzZWxmIG91dCBvZiBlZGl0aW5nIHRoZSBzZXR0aW5ncyE8L3NwYW4+ PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFkbWluLXNpZGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj48L3NwYW4+IDogVGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IG9mIHlvdXIgJiM4MjE2O3RleHRwYXR0ZXJuJiM4MjE3OyBhZG1pbiBzaWRlLiBU aGlzIGlzIHVzdWFsbHkgPGNvZGU+aHR0cDovL3NpdGUuY29tL3RleHRwYXR0ZXJuPC9jb2Rl PiBidXQgaWYgeW91IGFyZSBydW5uaW5nIDxhIGhyZWY9IiNzbWRfcHJvZ2hlbHBfbXVsdGlz aXRlIj5tdWx0aS1zaXRlPC9hPiBvciBoYXZlIG90aGVyd2lzZSBhbHRlcmVkIHRoZSBkaXJl Y3RvcnkgeW91IGNhbiBzcGVjaWZ5IGl0IGhlcmUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPlByb2dub3N0aWNzIGRpcjwvc3Bhbj4gOiBUaGUgZm9sZGVyIHdoZXJlIHRoZSBw cm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZSB3aWxsIHJlc2lkZS4gVGhlIGRpcmVjdG9yeSBt dXN0IGFscmVhZHkgZXhpc3QgYW5kIGJlIHdyaXRhYmxlIG9yIHlvdXIgY2hvc2VuIGxvY2F0 aW9uIHdpbGwgYmUgaWdub3JlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VW5p cXVlIHByZWZpeDwvc3Bhbj4gOiBwcmVmaXggdGhlIGNoZWNrc3VtcyBmaWxlIHdpdGggdGhp cyBzdHJpbmcuIFVzZWZ1bCB0byBhdm9pZCBmaWxlcyBjbGFzaGluZyBpZiB5b3UgYXJlIHVz aW5nIHRoZSBzYW1lIChub24tZG9jcm9vdCkgZm9sZGVyIHRvIHN0b3JlIHRoZSBjaGVja3N1 bXMgZnJvbSBtb3JlIHRoYW4gb25lIHNpdGUuPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRf cHJvZ2hlbHBfaG93aXR3b3JrcyI+SG93IGl0IHdvcmtzPC9oMj4KCgk8cD5JZGVhbGx5LCB0 aGUgcGx1Z2luIHdvdWxkIGJlIGEgdGltZWQgc2NyaXB0IHRoYXQgcnVucyBldmVyeSBOIHNl Y29uZHMuIEJ1dCB0aGF0IHJlcXVpcmVzIGEgcGFydGljdWxhciBwaWVjZSBvZiBzb2Z0d2Fy ZSAoY3Jvbikgb24geW91ciBob3N0IGFuZCB0aGVyZSYjODIxNztzIG5vIGd1YXJhbnRlZSBp dCBleGlzdHMuIFRodXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYW4gJiM4MjE2O3RyaWdnZXIm IzgyMTc7IHRoZSBwbHVnaW4gaXMgVGV4dHBhdHRlcm4gaXRzZWxmLiBUaGUgcGx1Z2luIHJ1 bnMgZXZlcnkgdGltZSB5b3UgaW50ZXJhY3Qgd2l0aCB0aGUgYWRtaW4gc2lkZSwgYnV0IGlm IGl0IGNoZWNrZWQgYWxsIHRoZSBmaWxlcyBhZ2FpbnN0IGFsbCB0aGUgY2hlY2tzdW1zIHlv dSBoYXZlIGNob3NlbiBvbiBldmVyeSBjbGljaywgeW91ciBhZG1pbiBzaWRlIHdvdWxkIHNs b3cgZG93biBhIGxvdC4gVGhlIGNvbXByb21pc2UgaXMgdG8gc3BlY2lmeSBhIHRpbWVvdXQg dmFsdWUgYW5kIGEgbnVtYmVyIG9mIGZpbGVzIHRvIGNoZWNrLiBUaGlzIGlzIGhvdyBpdCB3 b3Jrczo8L3A+CgoJPG9sPgoJCTxsaT5XaGVuIHlvdSBjbGljayBhIHRhYiBvciBpbnRlcmFj dCB3aXRoIHRoZSBhZG1pbiBzaWRlLCB0aGUgcGx1Z2luIGxvb2tzIGF0IHdoZW4geW91IDxl bT5sYXN0PC9lbT4gY2xpY2tlZCBzb21ldGhpbmcgYW5kIGFza3MgJiM4MjIwO2lzIGl0IGdy ZWF0ZXIgdGhhbiBOIChzZWNvbmRzKT8mIzgyMjE7IHdoZXJlIE4gaXMgdGhlIHZhbHVlIG9m IDxjb2RlPkNoZWNrIGZpbGVzIChhdCBtb3N0KSBldmVyeTwvY29kZT4gb24gdGhlIFNldHVw IHBhbmVsLiBJdCBhbHNvIGNoZWNrcyBpZiB0aGUgY3VycmVudCB0aW1lIG9mIGRheSBpcyBi ZXR3ZWVuIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGluIDxjb2RlPkNoZWNrIGZpbGVzIGJldHdl ZW48L2NvZGU+PC9saT4KCQk8bGk+SWYgc28sIGl0IGdyYWJzIGFzIG1hbnkgZmlsZXMgYXMg eW91IGhhdmUgc3BlY2lmaWVkIGluIDxjb2RlPkNoZWNrIHRoaXMgbWFueSBmaWxlcyBlYWNo IHRpbWU8L2NvZGU+LCB0ZXN0cyB0aGVtIGFuZCByZXNldHMgdGhlIHRpbWVyLiBJdCBrZWVw cyBhIG5vdGUgb2YgaG93IGZhciBpdCBoYXMgd29ya2VkIHRocm91Z2ggeW91ciBsaXN0IG9m IGZpbGVzIGFuZCBjb250aW51ZXMgd2hlcmUgaXQgbGVmdCBvZmYgbmV4dCB0aW1lIGl0IHJ1 bnM8L2xpPgoJCTxsaT5JZiB0aGUgdmFsdWUgb2YgTiBoYXMgbm90IHlldCBiZWVuIHJlYWNo ZWQsIGl0IGRvZXMgbm90aGluZywgdGh1cyBzYXZpbmcgeW91IHByZWNpb3VzIHByb2Nlc3Nv ciBjeWNsZXM8L2xpPgoJPC9vbD4KCgk8cD5BbGwgdGhhdCBpcyBncmVhdCBpZiB5b3UmIzgy MTc7cmUgY29udGludWFsbHkgdXNpbmcgdGhlIGFkbWluIHNpZGUgYW5kIHByb2R1Y2luZyBj bGlja3MgZm9yIHRoZSBwbHVnaW4gdG8gcnVuLiBCdXQgb25jZSB5b3UgaGFuZCBvdmVyIHRo ZSBzaXRlIHRvIHlvdXIgY2xpZW50LCB0aGV5IG1heSBub3QgdXNlIHRoZSBhZG1pbiBzaWRl IGFzIG9mdGVuIGFzIHlvdSAmIzgyMTI7IGlmIGF0IGFsbC4gVGh1cyB5b3VyIGZpbGVzIHdv dWxkIHJhcmVseS9uZXZlciBiZSBjaGVja2VkLiBUbyBjb3VudGVyYWN0IHRoaXMsIHlvdSBj YW4gYXNrIHRoZSBwbHVnaW4gdG8gcmVzcG9uZCB0byBwdWJsaWMgc2lkZSBjbGlja3MgYXMg d2VsbCBzbyB0aGF0IGFueSB0aW1lIGEgdmlzaXRvciAob3IgYm90KSBjcmF3bHMgeW91ciBw YWdlcyB0aGUgcGx1Z2luIHJ1bnMsIGNoZWNrcyBpZiB0aGUgdGltZW91dCBoYXMgYmVlbiBl eGNlZWRlZCBhbmQsIGlmIHNvLCBjaGVja3Mgc29tZSBmaWxlcyBhbmQgcmVzZXRzIHRoZSB0 aW1lciAoZXhhY3RseSBhcyBpdCB3b3VsZCBkbyBvbiB0aGUgYWRtaW4gc2lkZSkuPC9wPgoK CTxwPlRoaXMgd2lsbCBwdXNoIHRoZSBwcm9jZXNzaW5nIGxvYWQgb250byB5b3VyIHB1Ymxp YyBzaXRlLCBidXQgc2luY2UgaXQmIzgyMTc7cyBvbmx5IHJ1biBhdCBtb3N0IG9uY2UgZXZl cnkgTiBzZWNvbmRzIGFuZCB5b3Ugc3BlY2lmeSBob3cgbWFueSBmaWxlcyB0byByZWFkIGVh Y2ggdGltZSwgeW91IGNhbiBjb250cm9sIGhvdyBtdWNoIG9mIGFuIGltcGFjdCBpdCBoYXMg YnkgbWF0Y2hpbmcgdGhhdCB3aXRoIHlvdXIgZGVzaXJlIHRvIGtub3cgJiM4MjE2O2luc3Rh bnRseSYjODIxNzsgdGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgdmVyc3VzIHRoZSB2b2x1 bWUgb2YgdHJhZmZpYyAvIHZpc2l0b3JzIHRvIHRoZSBzaXRlIGFuZCBob3cgb2Z0ZW4geW91 IHdhbnQgdG8gZGVsYXkgdGhlaXIgYnJvd3NpbmcuPC9wPgoKCTxwPlRoZSBnb29kIHRoaW5n IGFib3V0IGJlaW5nIGFibGUgdG8gc3BlY2lmeSBib3RoIHRoZSB0aW1lb3V0LCB0aGUgdGlt ZSBvZiBkYXkgYW5kIHRoZSBxdWFudGl0eSBvZiBmaWxlcyBpcyB0aGF0IHlvdSBjYW4gZGV0 ZXJtaW5lIGlmIHRoZSBwbHVnaW4gcnVucyAmIzgyMTY7bGl0dGxlIGFuZCBvZnRlbiYjODIx Nzsgb3IgdGFrZXMgbW9yZSBvZiB5b3VyIHJlc291cmNlcyB3aGVuIGl0IHJ1bnMgbGVzcyBm cmVxdWVudGx5IG9yIGR1cmluZyBvZmYtcGVhayB0aW1lcy4gVGhlIHJlY29tbWVuZGF0aW9u IGlzIHRvIHJ1biBmYWlybHkgZnJlcXVlbnRseSAmIzgyMTI7IGJldHdlZW4gMTAgYW5kIDYw IHNlY29uZHMgaXMgZ29vZCAmIzgyMTI7IGFuZCBvbmx5IHByb2Nlc3NpbmcgYSBzbWFsbCBu dW1iZXIgb2YgZmlsZXMsIHNheSAyMCBvciAzMCBlYWNoIHRpbWUuPC9wPgoKCTxwPkFzIGFu IGV4YW1wbGUsIGlmIHlvdSBtb25pdG9yZWQgZXZlcnkgZmlsZSBpbiBhIHN0b2NrIDxzcGFu IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGluc3RhbGxhdGlvbiB3aXRoIGEgdGVuLXNlY29u ZCB0aW1lb3V0IGFuZCBjaGVja2VkIDMwIGZpbGVzIGVhY2ggdGltZSwgdGhlbiAmIzgyMTI7 IGFzc3VtaW5nIHlvdSBoYWQgYXQgbGVhc3QgZml2ZSBjbGlja3MgcGVyIG1pbnV0ZSAmIzgy MTI7IHlvdSB3b3VsZCBjeWNsZSB0aHJvdWdoIHRoZW0gaW4gdW5kZXIgYSBtaW51dGUuIEFu ZCB5b3VyIHZpc2l0b3JzIHByb2JhYmx5IHdvbiYjODIxNzt0IG5vdGljZSB0aGUgZGVsYXku IElmIHlvdSBoYXZlIGZld2VyIHRoYW4gZml2ZSBjbGlja3MgcGVyIG1pbnV0ZSB0aGVuIGl0 IHdpbGwgdGFrZSBsb25nZXIgdG8gY3ljbGUgdGhyb3VnaCB0aGUgZmlsZXMgYW5kIHRoZSBj aGFuY2Ugb2YgY2F0Y2hpbmcgY2hhbmdlcyBhcyB0aGV5IGhhcHBlbiByZWR1Y2VzLiBCdXQg aWYgeW91IHJ1biB0b28gb2Z0ZW4gKHNheSwgZXZlcnkgb25lIG9yIHR3byBzZWNvbmRzKSB5 b3UgYXJlIHdhc3RpbmcgeW91ciB2aXNpdG9ycyYjODIxNzsgdGltZSwgeW91ciBzZXJ2ZXIm IzgyMTc7cyByZXNvdXJjZXMgYW5kIGluY3JlYXNpbmcgdGhlIGNoYW5jZSBvZiB0aGUgcGx1 Z2luIG1pc2luZm9ybWluZyB5b3Ugb2YgYWx0ZXJhdGlvbnMgKGl0IG1heSBzdGlsbCBiZSBw YXJ0d2F5IHRocm91Z2ggdGhlIHByZXZpb3VzIHJ1biB3aGVuIHRoZSBuZXh0IG9jY3VycyBh bmQgdHJpZ2dlciBhIHdhcm5pbmcpLjwvcD4KCgk8cD5UaGUgcGx1Z2luIGlzIHdyaXR0ZW4g dG8gYmUgYXMgcXVpY2sgYW5kIGVmZmljaWVudCBhcyBpdCBwb3NzaWJseSBjYW4gdG8gYXZv aWQgYW55IGRlbGF5czsgdGhlcmUgbWF5IGJlIDxhIGhyZWY9IiNzbWRfcHJvZ2hlbHBfYmV0 dGVyIj5yb29tIGZvciBpbXByb3ZlbWVudDwvYT4gb2YgY291cnNlISBQbGVhc2UgYmUgYXdh cmUgdGhhdCBubyBkZXRlY3Rpb24gc3lzdGVtIGlzIGZvb2xwcm9vZiBhbmQgdGhlcmUgaXMg bm8gc3Vic3RpdHV0ZSBmb3IgdmlnaWxhbmNlIGFuZCA8YSBocmVmPSIjc21kX3Byb2doZWxw X3B3c3RyZW5ndGgiPmdvb2QgcGFzc3dvcmRzPC9hPiA6LSk8L3A+CgoJPGgyIGlkPSJzbWRf cHJvZ2hlbHBfbW9uZmlsZXMiPk1vbml0b3JpbmcgZmlsZXM8L2gyPgoKCTxwPkNsaWNraW5n IHRoZSA8ZW0+RmlsZXM8L2VtPiBidXR0b24gdGFrZXMgeW91IHRvIGEgc2NyZWVuIHdpdGgg YSB0ZXh0YXJlYSBpbiBpdCB0aGF0IGFsbG93cyB5b3UgdG8gY2hvb3NlIHRoZSBmaWxlcyB5 b3Ugd2lzaCB0byBtb25pdG9yLiBBIGNvdW50IG9mIHRoZSBjdXJyZW50IG51bWJlciBvZiBt b25pdG9yZWQgZmlsZXMgaXMgc2hvd24gYXQgdGhlIHRvcCwgYWxvbmcgd2l0aCB0aGUgbnVt YmVyIG9mIGZpbGVzIGF2YWlsYWJsZSBpbiB5b3VyIGNob3NlbiBmaWxlIGxvY2F0aW9uKHMp LiBUaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgYmUgaW4gdGhlIGxpc3Q6PC9wPgoKCTxvbD4K CQk8bGk+YWxsIGZpbGVzIGluIGFsbCBzdWJkaXJlY3RvcmllcyBmcm9tIGFsbCA8Y29kZT5G aWxlIGxvY2F0aW9uczwvY29kZT4geW91IHNwZWNpZmllZCB0byBtb25pdG9yIGluIHRoZSBT ZXR1cCBzY3JlZW48L2xpPgoJCTxsaT48ZW0+ZXhjZXB0PC9lbT4gYW55IGZpbGVzIGJlbG93 IHRoZSBkaXJlY3RvcmllcyB5b3UgY2hvc2UgdG8gZXhjbHVkZTwvbGk+CgkJPGxpPjxlbT5l eGNlcHQ8L2VtPiBhbnkgZmlsZSBuYW1lcyB5b3UgZXhwbGljaXRseSBjaG9zZSB0byBpZ25v cmU8L2xpPgoJCTxsaT48ZW0+ZXhjZXB0PC9lbT4gdGhlIHByb2dub3N0aWNzIGNoZWNrc3Vt cyBmaWxlPC9saT4KCTwvb2w+CgoJPHA+QXQgZmlyc3QsIG5vIGZpbGVzIHdpbGwgYmUgc2Vs ZWN0ZWQgc28geW91IHdpbGwgYmUgbW9uaXRvcmluZyBub3RoaW5nLiBDaG9vc2Ugd2hpY2gg ZmlsZXMgeW91IHdpc2ggdG8gbW9uaXRvciBhbmQgc2F2ZSB0aGUgY2hhbmdlcy4gVGhlIHBs dWdpbiB3aWxsIGtlZXAgdGFicyBvbiB0aG9zZSBmaWxlcy48L3A+CgoJPHA+SWYgeW91IGhh dmUgZWxlY3RlZCB0byB3YXRjaCBmb3IgYWRkaXRpb25zIHRvIHRoZSBmaWxlIHN5c3RlbSwg YW55IGZpbGVzIGluIGFueSBvZiB5b3VyIGNob3NlbiBsb2NhdGlvbnMgdGhhdCBhcmUgbm90 IGN1cnJlbnRseSBpbiB0aGUgbGlzdCBhdCB0aGUgdGltZSB5b3UgaGl0IDxlbT5TYXZlPC9l bT4gKHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB5b3UgYXJlIG1vbml0b3JpbmcgdGhlbSBvciBu b3QpIHdpbGwgdHJpZ2dlciBhbiBhbGFybS4gR28gYWhlYWQgYW5kIHRyeSBpdDogYWRkIHNv bWUgZmlsZXMgdG8geW91ciBzZXJ2ZXIgb3IgaW5zdGFsbCBhIG5ldyB0aGVtZSBvciBzb21l dGhpbmcgYW5kIHRoZSBwbHVnaW4gd2lsbCB0ZWxsIHlvdS48L3A+CgoJPGgyIGlkPSJzbWRf cHJvZ2hlbHBfYWNrIj5BY2tub3dsZWRnaW5nIGFsYXJtczwvaDI+CgoJPHA+SWYgb25lIG9y IG1vcmUgZmlsZXMgYXJlIGFsdGVyZWQsIGRlbGV0ZWQsIG9yIG5ldyBmaWxlcyBoYXZlIGJl ZW4gYWRkZWQgKGRlcGVuZGluZyBvbiB3aGljaCBhY3Rpb25zIHlvdSBoYXZlIGVsZWN0ZWQg dG8gbW9uaXRvcikgdGhlIHBsdWdpbiB3aWxsIGRldGVjdCB0aGlzIHdoZW4gdGhlIG5leHQg YWRtaW4tIG9yIHB1YmxpYy1zaWRlIGNsaWNrIGlzIHJlY2VpdmVkIGFuZCB0aGUgdGltZW91 dCBjeWNsZSBpcyBleGNlZWRlZC4gSXQgd2lsbCB0aGVuIHRha2UgdGhlIGFjdGlvbiB5b3Ug Y2hvc2UuIE5vdGUgb2YgY291cnNlIHRoYXQgeW91IHdvbiYjODIxNzt0IHNlZSB0aGUgYWRt aW4tc2lkZSB3YXJuaW5nIGlmIG5vdCBsb2dnZWQgaW4hPC9wPgoKCTxwPlRoZSBtZXNzYWdl IGRlbGl2ZXJlZCB0byB5b3UgY29udGFpbnMgYSBsaW5rIHRvIHRoZSBBY2tub3dsZWRnZW1l bnQgcGFnZSAod2hpY2ggY2FuIGFsc28gYmUgcmVhY2hlZCBieSBjbGlja2luZyB0aGUgPGVt PkFsYXJtczwvZW0+IGJ1dHRvbiBmcm9tIHRoZSBQcm9nbm9zdGljcyB0YWIpLiBZb3UgYXJl IHByZXNlbnRlZCB3aXRoIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzeXN0ZW0gYWx0ZXJhdGlv bnMuIElmIHlvdSBrbm93IGFib3V0IHRoZSBjaGFuZ2VzICYjODIxMjsgZS5nLiB5b3UgaW5p dGlhdGVkIHRoZW0gYnkgdXBsb2FkaW5nIHNvbWUgbmV3IGZpbGUgdmVyc2lvbihzKSAmIzgy MTI7IHRoZW4geW91IGNhbiBhY2tub3dsZWdkZSB0aGlzIGJ5IHBsYWNpbmcgYSBjaGVjayBt YXJrIG5leHQgdG8gdGhlIGZpbGVzIHlvdSBrbm93IGNvbnRhaW4gbGVnaXRpbWF0ZSBhbHRl cmF0aW9ucy4gV2hlbiB5b3UgY2xpY2sgdGhlIDxlbT5BY2tub3dsZWRnZTwvZW0+IGJ1dHRv biB5b3Ugc2lnbmlmeSB0byB0aGUgcGx1Z2luIHRoYXQgeW91IGFjY2VwdCB0aGUgY2hhbmdl cy4gVGh1cyB0aGUgbmV3IGZpbGUocykgYmVjb21lIHRoZSBiYXNlbGluZS48L3A+CgoJPHA+ SWYgeW91IGFyZSBtb25pdG9yaW5nIGZpbGUgc3lzdGVtIGFkZGl0aW9ucywgdGhlIGFjdCBv ZiBhY2tub3dsZWRnaW5nIHRoZSBhbGFybSBpbmRpY2F0ZXMgdGhhdCB5b3UgYXJlIGhhcHB5 IGZvciB0aGUgbmV3IGZpbGUocykgdG8gYmUgbW9uaXRvcmVkLiBUaGV5IHdpbGwgYXV0b21h dGljYWxseSBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBGaWxlcyB0byBtb25pdG9yICh5b3Ug Y2FuIHZlcmlmeSB0aGlzIGJ5IHZpc2l0aW5nIHRoZSBQcm9nbm9zdGljIHRhYiYjODIxNztz IDxlbT5GaWxlczwvZW0+IGxpc3QpLiBJZiB5b3Uga25vdyBhYm91dCBzb21lIG9mIHRoZSBm aWxlcyAocGVyaGFwcyB0aGV5IGFyZSBuZXcgYWRkaXRpb25zKSBhbmQgeW91IGRvbiYjODIx Nzt0IHdhbnQgdG8gbW9uaXRvciB0aGVtLCBzZWxlY3QgdGhlIGZpbGUocykgYW5kIGNsaWNr IDxlbT5JZ25vcmU8L2VtPi4gVGhlIGFsYXJtIHdpbGwgYmUgYWNrbm93bGVkZ2VkIGJ1dCB5 b3Ugd2lsbCBub3QgYmUgbW9uaXRvcmluZyB0aGUgZmlsZShzKS48L3A+CgoJPHA+SWYgeW91 IGNob29zZSBub3QgdG8gYWNrbm93bGVkZ2UvaWdub3JlIHNvbWUgb3IgYWxsIG9mIHRoZSBm aWxlcywgeW91IHdpbGwgY29udGludWUgdG8gYmUgbmFnZ2VkIGF0IHlvdXIgZGVzaWduYXRl ZCBhbGFybSBmcmVxdWVuY3kgdW50aWwgeW91IGFja25vd2xlZGdlIHRoZSBwcm9ibGVtcyBv ciBmaXggdGhlIGZpbGVzeXN0ZW0gdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiBEbyBiZWFyIGlu IG1pbmQgd2hlbiBjb25maWd1cmluZyB0aGUgZnJlcXVlbmN5IHRoYXQgYWxlcnRpbmcgdG9v IG9mdGVuIGNhbiBhbGllbmF0ZSB1c2VycyBhbmQgbWFrZSBhbiBhbGFybSBzaXR1YXRpb24g bGVzcyBlZmZlY3RpdmUuPC9wPgoKCTxoMiBpZD0ic21kX3Byb2doZWxwX2NzaSI+Rm9yZW5z aWNzPC9oMj4KCgk8cD48c3Ryb25nPkJlZm9yZTwvc3Ryb25nPiBhY2tub3dsZWRnaW5nIGFs YXJtcywgeW91IG1heSBjaG9vc2UgdG8gc2VuZCBvZmYgZm9yZW5zaWNzIGluZm9ybWF0aW9u IHRvIGEgZGVzaWduYXRlZCBlLW1haWwgYWRkcmVzcy4gVGhlIGZvbGxvd2luZyBpbmZvcm1h dGlvbiBpcyBzZW50OjwvcD4KCgk8dWw+CgkJPGxpPkZpbGUgaW5mb3JtYXRpb24gYWJvdXQg ZWFjaCBjaGFuZ2VkL2FkZGVkIGZpbGUsIHN1Y2ggYXMgaXRzIHNpemUsIG1vZGlmaWNhdGlv biB0aW1lLCBhbmQgdXNlciAvIGdyb3VwIG93bmVyc2hpcDwvbGk+CgkJPGxpPlRoZSBjb250 ZW50cyBvZiB0aGUgZmlsZXMgdGhlbXNlbHZlcywgPHNwYW4gY2xhc3M9ImNhcHMiPkJBU0U8 L3NwYW4+LTY0IGVuY29kZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGUtbWFpbDwvbGk+CgkJPGxp PlRoZSBuYW1lcyAmYW1wOyBwYXRocyBvZiBhbnkgZGVsZXRlZCBmaWxlczwvbGk+CgkJPGxp PkFueSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBsb2cgZW50cmllcyB0aGF0IG9j Y3VycmVkIGVpdGhlciBzaWRlIG9mIHRoZSBhbGFybSBjb25kaXRpb24gKDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IGxvZ2dpbmcgbXVzdCBiZSBlbmFibGVkIGluIHlvdXIgPGVt PkFkbWluIC0mZ3Q7IFByZWZlcmVuY2VzPC9lbT4pPC9saT4KCTwvdWw+CgoJPHA+WW91IGNh biBzZWxlY3Qgd2hpY2ggZmlsZSBpbmZvcm1hdGlvbiB0byBzZW5kIG9mZiB2aWEgdGhlIGNo ZWNrIGJveGVzLiBUaGUgb25lcyB5b3Ugc2VsZWN0ZWQgd2lsbCByZW1haW4gc2VsZWN0ZWQg Zm9yIGNvbnZlbmllbmNlIGFmdGVyIHRoZSBmb3JlbnNpY3MgaGF2ZSBiZWVuIHNlbnQsIHNv IHlvdSBtYXkgaW1tZWRpYXRlbHkgaGl0IDxlbT5BY2tub3dsZWRnZTwvZW0+IHRvIGFja25v d2xlZGdlIHRoZSBvbmVzIHlvdSBub3RpZmllZC48L3A+CgoJPGgyIGlkPSJzbWRfcHJvZ2hl bHBfYWR2aWNlIj5BZHZpY2U8L2gyPgoKCTxwPkNsaWNraW5nIHRoZSA8ZW0+QWR2aWNlPC9l bT4gYnV0dG9uIHdpbGwgcnVuIHRocm91Z2ggYSBzZXJpZXMgb2YgY2hlY2tzIGFuZCBvZmZl ciBzdWdnZXN0aW9ucyBvbiBob3cgdG8gaGFyZGVuIHlvdXIgaW5zdGFsbGF0aW9uLiBUaGUg bW9zdCBpbXBvcnRhbnQgb25lIHRvIGZvbGxvdyBpcyBpZiB5b3UgYXJlIHdhcm5lZCBhYm91 dCB0aGUgcHJvZ25vc3RpY3MgY2hlY2tzdW1zIGZpbGUgYmVpbmcgaW4gZG9jcm9vdC4gSXQg aXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIG1vdmUgaXQgc29tZXdoZXJlIG5vbi13ZWIgYWNj ZXNzaWJsZS48L3A+CgoJPGgyIGlkPSJzbWRfcHJvZ2hlbHBfcHdzdHJlbmd0aCI+UGFzc3dv cmQgc3RyZW5ndGg8L2gyPgoKCTxwPkFzIGFuIGFpZCB0byB5b3VyIHVzZXJzLCBhIHBhc3N3 b3JkIHN0cmVuZ3RoIG1ldGVyIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgb24gdGhlIDxl bT5BZG1pbiAtJmd0OyBVc2VyczwvZW0+IHRhYi4gV2hlbiB5b3UgdHlwZSB0byBjaGFuZ2Ug eW91ciBwYXNzd29yZCwgYW4gaW5kaWNhdGlvbiBvZiB0aGUgdGltZSBhIGN1cnJlbnQgZGVz a3RvcCBQQyB3b3VsZCB0YWtlIHRvIGNyYWNrIGl0IGlzIGdpdmVuLiBJdCYjODIxNztzIGEg dmVyeSByb3VnaCBjYWxjdWxhdGlvbiwgYWx0aG91Z2ggTW9vcmUmIzgyMTc7cyBMYXcgaXMg YXV0b21hdGljYWxseSB0YWtlbiBpbnRvIGFjY291bnQgKHRodXMgeW91ciBwYXNzd29yZCB3 aWxsIGJlY29tZSB3ZWFrZXIgb3ZlciB0aW1lIGlmIHlvdSBkbyBub3QgY2hhbmdlIGl0KS48 L3A+CgoJPHA+WW91IHdpbGwgZG8geW91cnNlbGYgYW5kIHlvdXIgc3lzdGVtIGEgaHVnZSBm YXZvdXIgdG8gY2hvb3NlIGEgcGFzc3BocmFzZSB0aGF0IHRha2VzIGluIGV4Y2VzcyBvZiBh IGZldyB0aG91c2FuZCB5ZWFycyB0byBjcmFjay4gVGhlIGxvbmdlciB0aGUgYmV0dGVyLiBS ZW1lbWJlciB0aGlzIGlzIGJhc2VkIG9uIGEgYnJ1dGUgZm9yY2UgYXR0YWNrIHVzaW5nIGEg c2luZ2xlIGRlc2t0b3AgUEMgJiM4MjEyOyBub3QgYSBtYWluZnJhbWUgb3IgYSBQQyBmYXJt ICYjODIxMjsgYW5kIGl0IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGhvdyBlYXN5IHRo ZSBwYXNzd29yZCBpcyB0byBndWVzcyBpZiB5b3UgdXNlIGRpY3Rpb25hcnkgd29yZHMgb3Ig PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Jsb2cvY2hvb3NpbmctYS1icmlsbGlh bnQtcGFzc3dvcmQiPnNvbWUgb3RoZXIgYmFkIHBhc3N3b3JkPC9hPi4gQ2hvb3NlIGEgZ29v ZCBvbmUgYW5kIHlvdSA8c3Ryb25nPnNpZ25pZmljYW50bHk8L3N0cm9uZz4gcmVkdWNlIHRo ZSBwcm9iYWJpbGl0eSBvZiBhIHN1Y2Nlc3NmdWwgYXR0YWNrLjwvcD4KCgk8aDIgaWQ9InNt ZF9wcm9naGVscF9jYWxsYmFja3MiPkNhbGxiYWNrczwvaDI+CgoJPHA+VGhlIHBsdWdpbiBo YXMgYSBjYWxsYmFjayBvZiBpdHMgb3duIGFsbG93aW5nIHlvdSB0byBwZXJmb3JtIGN1c3Rv bSA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBpbmplY3Rpb24gdGVzdHMuIEhvb2sg eW91ciBvd24gY29kZSBpbnRvIGl0IGJ5IHJhaXNpbmcgYSBjYWxsYmFjayBvbiB0aGUgZXZl bnQgPGNvZGU+c21kX3Byb2dub3N0aWNzPC9jb2RlPiBhbmQgc3RlcCA8Y29kZT5zcWxfaW5q ZWN0aW9uPC9jb2RlPi4gVGhpcyBjYWxsYmFjayBmaXJlcyBvbiBldmVyeSBwYWdlIGFjY2Vz cyBpZiA8Y29kZT5Qcm90ZWN0IGFnYWluc3QgU1FMIGluamVjdGlvbjwvY29kZT4gaXMgZW5h YmxlZC48L3A+CgoJPHA+WW91ciBjb2RlIGNhbiByZXR1cm46PC9wPgoKCTx1bD4KCQk8bGk+ LTEgdG8gYXNzZXJ0ICYjODIyMDtubyBpbmplY3Rpb24gZGV0ZWN0ZWQgYXQgYWxsIGFuZCBk byBub3QgcnVuIHRoZSBwbHVnaW4mIzgyMTc7cyA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9z cGFuPiBjaGVja3MmIzgyMjE7PC9saT4KCQk8bGk+MCB0byBhc3NlcnQgJiM4MjIwO25vIGlu amVjdGlvbiBkZXRlY3RlZCBidXQgcnVuIHRoZSBwbHVnaW4gY2hlY2tzIGFzIHdlbGwmIzgy MjE7PC9saT4KCQk8bGk+MSB0byBhc3NlcnQgJiM4MjIwO2luamVjdGlvbiBkZXRlY3RlZCYj ODIyMTsgKHBsdWdpbiBjaGVja3MgYXJlIGJ5cGFzc2VkKTwvbGk+Cgk8L3VsPgoKCTxwPklu IGFsbCBjYXNlcywgdGhlIHBsdWdpbiB3aWxsIGNvbnRpbnVlIHRvIHByb2Nlc3MgZm9yZW5z aWNzIGV2aWRlbmNlIGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRUUDwvc3Bhbj4gcmVkaXJl Y3Rpb24gaWYgdGhlIG9wdGlvbnMgYXJlIGVuYWJsZWQuIEJhaWwgb3V0IHdpdGggYW4gPGNv ZGU+ZXhpdCgpPC9jb2RlPiBvciA8Y29kZT50eHBfZGllKCk8L2NvZGU+IGlmIHlvdSB3aXNo IHRoZSBwbHVnaW4gdG8gdGVybWluYXRlIGluc3RlYWQuPC9wPgoKCTxoMiBpZD0ic21kX3By b2doZWxwX211bHRpc2l0ZSI+TXVsdGktc2l0ZSBzZXR1cDwvaDI+CgoJPHA+SWYgeW91IGFy ZSB1c2luZyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIG11bHRpLXNp dGUgZmVhdHVyZSB0aGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIHRoaW5ncyB0byBub3RlOjwv cD4KCgk8b2w+CgkJPGxpPllvdSBzaG91bGQgc2V0IHNtZF9wcm9nbm9zdGljcyB1cCBvbiA8 ZW0+ZWFjaDwvZW0+IGRvbWFpbiB5b3Ugd2lzaCB0byBwcm90ZWN0IHRvIGF2b2lkIG92ZXJs b2FkaW5nIG9uZSBkb21haW4gd2l0aCBjaGVja2luZyB0aGVtIGFsbDwvbGk+CgkJPGxpPkNo b29zZSBqdXN0IG9uZSBvZiB5b3VyIGRvbWFpbnMgYXMgdGhlICYjODIxNjttYXN0ZXImIzgy MTc7IHdoaWNoIHdpbGwgbW9uaXRvciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gY29yZSBmaWxlczwvbGk+CgkJPGxpPkNvbnNpZGVyIG1vdmluZyBhbGwgdGhlIGRvbWFp bnMgaW4gdGhlIDxjb2RlPi9zaXRlczwvY29kZT4gZm9sZGVyIG91dHNpZGUgZG9jcm9vdDwv bGk+CgkJPGxpPkVuc3VyZSB5b3UgZW1wbG95IGEgPGNvZGU+VW5pcXVlIHByZWZpeDwvY29k ZT4gb3IgeW91ciBjaGVja3N1bXMgZmlsZXMgd2lsbCBjbGFzaCwgY2F1c2luZyBvZGQgYmVo YXZpb3VyLiBUaGUgcmVjb21tZW5kZWQgbWV0aG9kIGlzIHRvIHVzZSB0aGUgPGNvZGU+UHJv Z25vc3RpY3MgZm9sZGVyPC9jb2RlPiBzZXR0aW5nIHRvIG1vdmUgYWxsIGNoZWNrc3VtIGZp bGVzIHRvIGEgY2VudHJhbCBsb2NhdGlvbiAmIzgyMTI7IG91dHNpZGUgZG9jcm9vdCAmIzgy MTI7IGFuZCB1c2UgdGhlIHNhbWUgZGlyZWN0b3J5IGZvciBhbGwgZG9tYWlucy4gVGhlIDxj b2RlPlVuaXF1ZSBwcmVmaXg8L2NvZGU+IHdpbGwgdGhlbiBkaXN0aW5ndWlzaCBiZXR3ZWVu IHRoZW08L2xpPgoJCTxsaT5UaGUgPGNvZGU+QWRtaW4tc2lkZSBVUkw8L2NvZGU+IG1heSB3 ZWxsIGJlIHdyb25nOiB5b3Ugc2hvdWxkIHByb2JhYmx5IGNoYW5nZSB0aGlzIG9uIGVhY2gg ZG9tYWluPC9saT4KCTwvb2w+CgoJPGgyIGlkPSJzbWRfcHJvZ2hlbHBfYmV0dGVyIj5IZWxw IG1ha2UgdGhlIHBsdWdpbiBiZXR0ZXI8L2gyPgoKCTxwPklmIHNtZF9wcm9nbm9zdGljcyBk b2VzIGRldGVjdCBzb21lIHJvZ3VlIGVsZW1lbnRzIGluIHlvdXIgZmlsZXN5c3RlbSwgcGxl YXNlIGNvbnNpZGVyIHNlbmRpbmcgdGhlIGZvcmVuc2ljcyB0byBwcm9nbm9zdGljcyBbYXRd IHN0ZWZkYXdzb24gW2RvdF0gY29tIHdpdGggYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyB5b3Ug cG9zc2libHkgY2FuLiBZb3UgY2FuIGVpdGhlciBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgZnJv bSB3aXRoaW4gdGhlIHBsdWdpbiAoc2VlIHRoZSBzZXR1cCBwYWdlLCB0aG91Z2ggbm90ZSB0 aGUgc2Vuc2l0aXZpdHkgb2Ygc29tZSBvZiB0aGUgZGF0YSBzZW50KSBvciBjb3B5IGFuZCBw YXN0ZSByZWxldmFudCBpbmZvcm1hdGlvbiBpbnRvIGFuIGUtbWFpbC4gVGhlIHNvcnQgb2Yg c3R1ZmYgdGhhdCBtaWdodCBiZSB1c2VmdWwgaXM6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gKGFuZC9vciBzZXJ2ZXIpIGxvZ3MgZm9yIHRoZSB0 aW1lIG9mIHRoZSBhdHRhY2s8L2xpPgoJCTxsaT5UaGUgbGluZXMgb2YgdGhlIGZpbGUocykg dGhhdCB3ZXJlIGFmZmVjdGVkIChvciB0aGUgZmlsZXMgaW4gdGhlaXIgZW50aXJldHkpPC9s aT4KCQk8bGk+VGhlIGNvbnRlbnQgb2YgYW55IGFkZGl0aW9uYWwgbGluZXMgYWRkZWQgb3Ig YWx0ZXJlZCBpbiB0aGUgZmlsZXM8L2xpPgoJCTxsaT5Zb3VyIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiwgTXlTUUwgYW5k IEFwYWNoZSB2ZXJzaW9uczwvbGk+CgkJPGxpPllvdXIgaG9zdGVyIGNvbXBhbnkgbmFtZTwv bGk+Cgk8L3VsPgoKCTxwPmFuZCBzbyBvbi4gQW55IGFuZCBhbGwgaW5mb3JtYXRpb24gd2ls bCBiZSB0cmVhdGVkIGluIHRoZSBzdHJpY3Rlc3QgY29uZmlkZW5jZSBvZiBjb3Vyc2UuIEFu YWx5c2luZyB0aGlzIGRhdGEgbWF5IGFsbG93IG1lIHRvIGltcHJvdmUgdGhlIHBsdWdpbiBh bmQgcGVyaGFwcyBjbG9zZSBhbnkgc2VjdXJpdHkgaG9sZXMgaW4gPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gaXRzZWxmLCBvciBldmVuIGhlbHAgbWFrZSB0aGUgcGx1Z2luIG1v cmUgcHJvLWFjdGl2ZSBieSBkZXRlY3RpbmcgdGhlIHZhcmlvdXMga2luZHMgb2YgYXR0YWNr IGluIHByb2dyZXNzIGFuZCBtaW5pbWlzaW5nIGRhbWFnZSB0byB5b3VyIGZpbGUgc3lzdGVt LiBUaGFua3MgaW4gYWR2YW5jZSBmb3IgeW91IGhlbHAuPC9wPgoKCTxoMiBpZD0iY2hhbmdl bG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTEgTm92IDEwIHwgMC4xMCB8IElu aXRpYWwgcmVsZWFzZTwvbGk+CgkJPGxpPjExIE5vdiAxMCB8IDAuMTEgfCBBZGRlZCBJZ25v cmUgYnV0dG9uPC9saT4KCQk8bGk+MTIgTm92IDEwIHwgMC4xMiB8IEZpeGVkIHdoaXRlIHNj cmVlbiBvZiBkZWF0aCBvbiBGaWxlcyA8ZW0+U2F2ZTwvZW0+IChiaW5hcnkgZmlsZXMgYXJl IG5vdyBsZWZ0IHVucHJvY2Vzc2VkKSA7IGltcHJvdmVkIHBlcmZvcm1hbmNlIDsgYWRkZWQg ZmlsZSBxdWFudGl0eSBjaGVjazwvbGk+CgkJPGxpPjE1IE5vdiAxMCB8IDAuMTMgfCBBbGFy bXMgcGFuZWwgbm93IGFsd2F5cyBkaXNwbGF5cyBhbGwgYWxlcnRzIGFuZCBkb2VzbiYjODIx Nzt0IGludGVyZmVyZSB3aXRoIGZpbGUgY2hlY2tpbmcgcm90YXRpb24gOyBmaXhlZCBpbmNv cnJlY3QgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gaW4gYWNrbm93bGVkZ2UgbWVz c2FnZXMgKHRoYW5rcyB0aGVib21ic2l0ZSkgdGhvdWdoIG11bHRpLXNpdGUgaW5zdGFsbGF0 aW9ucyBtYXkgc3RpbGwgYmUgd3JvbmcgOyByZW1vdmVkIGR1bWIgYWRtaW4tc2lkZSA8c3Bh biBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBpbmplY3Rpb24sIGFkZGVkIDxjb2RlPkNoZWNr IGZpbGVzIGJldHdlZW48L2NvZGU+IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiB2ZXJzaW9uIGFkdmljZSAoYWxsIHRoYW5rcyBydXVkKSA7IHR3ZWFrZWQgaW5qZWN0aW9u IGRldGVjdG9yIDsgcmVmYWN0b3JlZCBlLW1haWwgaGVhZGVyIGNvZGU8L2xpPgoJCTxsaT4x NiBOb3YgMTAgfCAwLjE0IHwgQWRkZWQgZm9yZW5zaWMgb3B0aW9ucyBmb3IgaGVhZGVyIHNw b29maW5nL1NRTCBpbmplY3Rpb25zIDsgY2FuIG5vdyB0aHJvdyA8c3BhbiBjbGFzcz0iY2Fw cyI+SFRUUDwvc3Bhbj4gcmVzcG9uc2UgY29kZSBvciBjdXN0b20gbWVzc2FnZS9mb3JtIGlu c3RlYWQgb2YgJiM4MjE2O25pY2UgdHJ5JiM4MjE3OyA7IHdpbGRjYXJkIGFiaWxpdHkgZm9y IGlnbm9yZWQgZmlsZXMgOyBhZGRlZCB1c2VyIGNoZWNrIGFuZCA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBkaXIgb3B0aW9uICh0aGFua3MgbWF2ZXJpY2spPC9saT4KCQk8bGk+ MDkgRGVjIDEwIHwgMC4xNSB8IEltcHJvdmVkIHdhcm5pbmcgZGlzcGxheSB3aGVuIHNhdmlu ZyBwcmVmZXJlbmNlcyAodGhhbmtzIG1hbmlxdWkpIDsgc2tpcHBlZCBjb21tZW50IHByZXZp ZXcgc3RlcCBmb3Igc3FsIGluamVjdGlvbnMgOyBmaXhlZCB2ZXJzaW9uIG51bWJlciBpbiBm cm9nbm9zdGljcyA7IGZpeGVkIGRpc3BsYXkgZXJyb3Igb24gQWR2aWNlIHBhbmVsIDsgYWRk ZWQgPGNvZGU+c3FsX2luamVjdGlvbjwvY29kZT4gY2FsbGJhY2sgOyBhZGRlZCBycGMgYWR2 aWNlIGNoZWNrPC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENT UyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVp Z2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEw NSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQt Y29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBm b250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGRpc3BsYXk6Ymxv Y2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBo MSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFs aWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk IGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2Vy aWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlm OyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQg eyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAx cHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3Nt ZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBi YWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRh YmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVt OyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAg dGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbTsgfQojc21kX2hlbHAg dWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsg Y29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsg fQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAq KiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiIzNTg4OTY1NjRk ODFlYjg4YTQ2NmU0MTI2OGY4MmUyYiI7fQ==