# Name: smd_where_used v0.19 # Type: Admin/Client side plugin # Find which forms/pages/articles/plugins/text have been used where in your design # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE0OiJzbWRfd2hlcmVfdXNlZCI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4xOSI7czoxMToiZGVzY3JpcHRpb24i O3M6ODA6IkZpbmQgd2hpY2ggZm9ybXMvcGFnZXMvYXJ0aWNsZXMvcGx1Z2lucy90ZXh0IGhh dmUgYmVlbiB1c2VkIHdoZXJlIGluIHlvdXIgZGVzaWduIjtzOjQ6ImNvZGUiO3M6MTExNjI6 Ii8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJp dnMoJ3NtZF93dScsJzEsMicpOw0KDQoJLy8gRXh0ZW5zaW9ucyB0YWINCglyZWdpc3Rlcl90 YWIoJ2V4dGVuc2lvbnMnLCAnc21kX3d1Jywgc21kX3d1X2dUeHQoJ3NtZF93dScpKTsNCgly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX3d1JywgJ3NtZF93dScpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfd3UoJGV2ZW50LCAkc3RlcCkgew0KCWlmKCEkc3RlcCBvciAhaW5f YXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF93dV9zZWFyY2gnLA0KCQkpKSkgew0KCQlz bWRfd3Vfc2hvd2Zvcm0oJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfd3Vfc2hvd2Zvcm0oJG1lc3NhZ2UsICR0ZXJtPScnLCAkc2VsPWFy cmF5KCksICRpbmNsPTAsICR3aG9sZT0wLCAkbW9kZT0wLCAkcGx1Z3R5cGU9MCwgJGNhc2U9 MCkgew0KCXBhZ2V0b3Aoc21kX3d1X2dUeHQoJ3NtZF93dScpLCRtZXNzYWdlKTsNCgkkYnRu U2VhcmNoID0gZklucHV0KCdzdWJtaXQnLCAnc21kX3d1X3NlYXJjaCcsIGdUeHQoJ3NlYXJj aCcpLCAnc21hbGxlcmJveCcpLnNJbnB1dCgnc21kX3d1X3NlYXJjaCcpLmhJbnB1dCgncGx1 Z3R5cGUnLCAoKCRwbHVndHlwZT09MSkgPyAwIDogMSkpOw0KCSRidG5TdHlsZSA9ICcgc3R5 bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7DQoJJHBsYWNlID0gYXJyYXkoJ3NlY3Rpb25z JywncGFnZXMnLCdmb3JtcycsJ2FydGljbGVzJyk7DQoJJHNlbCA9IChlbXB0eSgkc2VsKSkg PyAkcGxhY2UgOiAkc2VsOw0KDQoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1lPSJz bWRfd3VfZm9ybSI+JzsNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgllY2hvIHRyKGZM YWJlbENlbGwoc21kX3d1X2dUeHQoJ3NlYXJjaF9sYmwnKSkgLiB0ZGNzKGZJbnB1dCgndGV4 dCcsICdzZWFyY2hfZm9yJywgc3RyaXBzbGFzaGVzKCR0ZXJtKSwgJycsICcnLCAnJywgMzAs ICcnLCAnc21kX3NlYXJjaF9mb3InKSwgNCkgLiB0ZGEoJGJ0blNlYXJjaCwgJGJ0blN0eWxl KSk7DQoJZWNobyB0cihmTGFiZWxDZWxsKHNtZF93dV9nVHh0KCdmaWx0ZXInKSkudGRjcyhy YWRpbygnbWV0aCcsMCwoKCRpbmNsPT0wKT8xOjApKS5zbWRfd3VfZ1R4dCgnaW5jbHVzaW9u JykuIiAiIC4gcmFkaW8oJ21ldGgnLDEsKCgkaW5jbD09MSk/MTowKSkuc21kX3d1X2dUeHQo J2V4Y2x1c2lvbicpLiAiIHwgIiAuIHNtZF93dV9nVHh0KCd3aG9sZV93b3JkJykuY2hlY2ti b3goJ3dob2xlJywgMSwgKCgkd2hvbGU9PTEpPzE6MCkpLiAiIHwgIiAuIHNtZF93dV9nVHh0 KCdtYXRjaF9jYXNlJykuY2hlY2tib3goJ2Nhc2UnLCAxLCAoKCRjYXNlPT0xKT8xOjApKSwg NCkpOw0KCSRvdXQgPSAnJzsNCglmb3JlYWNoICgkcGxhY2UgYXMgJGhlcmUpIHsNCgkJJG91 dCAuPSBmTGFiZWxDZWxsKGdUeHQoJGhlcmUpIC4gY2hlY2tib3goJ3BsYWNlc1tdJywgJGhl cmUsIGluX2FycmF5KCRoZXJlLCRzZWwpKSk7DQoJfQ0KCWVjaG8gdHIoZkxhYmVsQ2VsbChz bWRfd3VfZ1R4dCgnc2VhcmNoX3doZXJlX2xibCcpKSAuICRvdXQpOw0KCWVjaG8gZW5kVGFi bGUoKTsNCgllY2hvICc8L2Zvcm0+JzsNCgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0i dGV4dC9qYXZhc2NyaXB0Ij4NCmpRdWVyeShmdW5jdGlvbigpIHsNCglqUXVlcnkoIiNzbWRf c2VhcmNoX2ZvciIpLmZvY3VzKCk7DQp9KTsNCjwvc2NyaXB0Pg0KRU9KUzsNCn0NCg0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfd3Vfc2VhcmNoKCkgew0KCWV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KCdzZWFyY2hfZm9yJykpKSk7DQoJJHdob2xlID0gZ3BzKCd3aG9sZScp Ow0KCSRjYXNlID0gZ3BzKCdjYXNlJyk7IC8vIDAgPSBjYXNlIGluc2Vuc2l0aXZlLCAxID0g Y2FzZSBzZW5zaXRpdmUNCgkkY2FzZVNlbnNlID0gKCRjYXNlPT0xKSA/ICcgQklOQVJZICcg OiAnJzsNCgkkbWV0aCA9IGdwcygnbWV0aCcpOyAvLyAwID0gaW5jbHVkZSwgMSA9IGV4Y2x1 ZGUNCgkkcGx1Z3R5cGUgPSBncHMoJ3BsdWd0eXBlJyk7IC8vIDAgPSBjbGllbnQsIDEgPSAw K2FkbWluLCAyID0gMStsaWJyYXJ5DQoJJHBsdWd0eXBlID0gKGlzX251bWVyaWMoJHBsdWd0 eXBlKSAmJiAkcGx1Z3R5cGUgPCAzKSA/ICRwbHVndHlwZSA6IDA7DQoJJGpvaW5tZSA9ICgk bWV0aCA9PSAwKSA/ICIgT1IgIiA6ICIgQU5EICI7DQoJJHBsYWNlcyA9IGdwcygncGxhY2Vz Jyk7DQoJJHBsYWNlcyA9IGlzX2FycmF5KCRwbGFjZXMpID8gJHBsYWNlcyA6IGFycmF5KCk7 DQoJJG1vZGUgPSAoJHNlYXJjaF9mb3IpID8gMCA6IDE7DQoJc21kX3d1X3Nob3dmb3JtKCcn LCAkc2VhcmNoX2ZvciwgJHBsYWNlcywgJG1ldGgsICR3aG9sZSwgJG1vZGUsICRwbHVndHlw ZSwgJGNhc2UpOw0KDQoJLy8gRW50cmllcyBpbiB0aGUgcGxhY2VUYWJsZSBhcnJheSBhcmU6 DQoJLy8gIDA6IFRhYmxlIHRvIHNlYXJjaA0KCS8vICAxOiBDb2x1bW4gdG8gc2VhcmNoDQoJ Ly8gIDI6IENvbHVtbiB0byByZXR1cm4NCgkvLyAgMzogSGVhZGluZyB0byBkaXNwbGF5IGlm IHJlc3VsdHMgZm91bmQNCgkvLyAgNDogRXZlbnQgb2YgZGVzdGluYXRpb24gVVJMDQoJLy8g IDU6IFN0ZXAgb2YgZGVzdGluYXRpb24gVVJMDQoJLy8gIDY6IEFkZGl0aW9uYWwgVVJMIHZh cg0KCS8vICA3OiBBZGRpdGlvbmFsIFVSTCB2YXIgcmVwbGFjZW1lbnQgKHVzZWQgaW4gc3Ry dHIpDQoJJHBsYWNlVGFibGUgPSBhcnJheSgNCgkJJ3BhZ2VzJyA9PiBhcnJheSgndHhwX3Bh Z2UnLCAndXNlcl9odG1sJywgJ25hbWUnLCBnVHh0KCdwYWdlcycpLCAncGFnZScsICcnLCAn bmFtZScsICd7bmFtZX0nKSwNCgkJJ2Zvcm1zJyA9PiBhcnJheSgndHhwX2Zvcm0nLCAnZm9y bScsICduYW1lJywgZ1R4dCgnZm9ybXMnKSwgJ2Zvcm0nLCAnZm9ybV9lZGl0JywgJ25hbWUn LCAne25hbWV9JyksDQoJCSdhcnRpY2xlcycgPT4gYXJyYXkoJ3RleHRwYXR0ZXJuJywgJ0Jv ZHksRXhjZXJwdCxvdmVycmlkZV9mb3JtLHNlY3Rpb24sVGl0bGUsa2V5d29yZHMnLCAnSUQs dGl0bGUnLCBnVHh0KCdhcnRpY2xlcycpLCAnYXJ0aWNsZScsICdlZGl0JywgJ0lEJywgJ3tJ RH0nKSwNCgkJJ3NlY3Rpb25zJyA9PiBhcnJheSgndHhwX3NlY3Rpb24nLCAncGFnZSxjc3Mn LCAnbmFtZScsIGdUeHQoJ3NlY3Rpb25zJyksICdzZWN0aW9uJywgJycsICcjJywgJ3NlY3Rp b24te25hbWV9JyksDQoJKTsNCg0KCSRycyA9IGFycmF5KCk7DQoJZWNobyBuLic8aHIgd2lk dGg9IjUwJSIgLz4nOw0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCSRjb2xIZWFkID0g YXJyYXkoKTsNCgkkY29sQm9keSA9IGFycmF5KCk7DQoNCglpZiAoJHNlYXJjaF9mb3IpIHsN CgkJZWNobyB0cih0ZGNzKHRhZyhnVHh0KCdzZWFyY2hfcmVzdWx0cycpLCAnaDInKSwgNCkp Ow0KCQlmb3JlYWNoICgkcGxhY2VzIGFzICRwbGFjZSkgew0KCQkJJGNyb3cgPSAkcGxhY2VU YWJsZVskcGxhY2VdOw0KCQkJJHdoZXJlID0gYXJyYXkoKTsNCgkJCSR3aXRlbXMgPSBkb19s aXN0KCRjcm93WzFdKTsNCgkJCSRsaXN0ID0gZG9fbGlzdCgkY3Jvd1syXSk7DQoNCgkJCWZv cmVhY2ggKCR3aXRlbXMgYXMgJGl0ZW0pIHsNCgkJCQkkd2hlcmVbXSA9ICRjYXNlU2Vuc2Ug LiAkaXRlbSAuICgoJG1ldGg9PTEpID8gJyBOT1QnIDogJycpIC4gKCgkd2hvbGU9PTEpID8g JyBSRUdFWFAgXCdbWzo8Ol1dJy4kc2VhcmNoX2Zvci4nW1s6PjpdXVwnJyA6ICIgTElLRSAn JSRzZWFyY2hfZm9yJSciKTsNCgkJCX0NCgkJCSRycyA9IHNhZmVfcm93cygkY3Jvd1syXSwg JGNyb3dbMF0sICcoJy5qb2luKCRqb2lubWUsICR3aGVyZSkuJykgT1JERVIgQlkgJy4kbGlz dFswXSk7DQoJCQkkY29sSGVhZFtdID0gdGQoc3Ryb25nKCRjcm93WzNdKSk7DQoJCQlpZiAo JHJzKSB7DQoJCQkJJG91dCA9ICc8dWw+JzsNCgkJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykg ew0KCQkJCQkkaGxpbmsgPSAnJzsNCgkJCQkJJHZhcnMgPSAnJzsNCgkJCQkJZm9yZWFjaCAo JGxpc3QgYXMgJGNvbCkgew0KCQkJCQkJJGZyb20gPSAneycuJGNvbC4nfSc7DQoJCQkJCQlp ZiAoc3RycG9zKCRjcm93WzddLCAkZnJvbSkgIT09IGZhbHNlKSB7DQoJCQkJCQkJaWYgKCRj cm93WzZdID09ICIjIikgew0KCQkJCQkJCQkkdmFycyA9IGpvaW5fcXMoYXJyYXkoImV2ZW50 IiA9PiAkY3Jvd1s0XSwgInN0ZXAiID0+ICRjcm93WzVdKSkuJGNyb3dbNl0uc3RydHIoJGNy b3dbN10sIGFycmF5KCRmcm9tID0+ICRyb3dbJGNvbF0pKTsNCgkJCQkJCQl9IGVsc2Ugew0K CQkJCQkJCQkkdmFycyA9IGpvaW5fcXMoYXJyYXkoImV2ZW50IiA9PiAkY3Jvd1s0XSwgInN0 ZXAiID0+ICRjcm93WzVdLCAkY3Jvd1s2XSA9PiBzdHJ0cigkY3Jvd1s3XSwgYXJyYXkoJGZy b20gPT4gJHJvd1skY29sXSkpKSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJGhsaW5r IC49ICRyb3dbJGNvbF0uIiAiOw0KCQkJCQl9DQoJCQkJCSRvdXQgLj0gKCRobGluaykgPyAn PGxpPicgLiAoKCR2YXJzKSA/ICc8YSBocmVmPSJpbmRleC5waHAnLiR2YXJzLiciPicuJGhs aW5rLic8L2E+ICcgOiAkaGxpbmspIC4gJzwvbGk+JzogJyc7DQoJCQkJfQ0KCQkJCSRvdXQg Lj0gJzwvdWw+JzsNCgkJCQkkY29sQm9keVtdID0gdGQoJG91dCk7DQoJCQl9IGVsc2Ugew0K CQkJCSRjb2xCb2R5W10gPSB0ZChnVHh0KCdub19yZXN1bHRzX2ZvdW5kJykpOw0KCQkJfQ0K CQl9DQoJCWVjaG8gdHIoam9pbigiICIsICRjb2xIZWFkKSk7DQoJCWVjaG8gdHIoam9pbigi ICIsICRjb2xCb2R5KSk7DQoJfSBlbHNlIHsNCgkJLy8gTm8gc2VhcmNoIGNyaXRlcmlhLCBz byBzaG93IG9ycGhhbnMNCgkJZWNobyB0cih0ZGNzKHRhZyhzbWRfd3VfZ1R4dCgnb3JwaGFu X3Jlc3VsdHMnKSwgJ2gyJyksIDUpKTsNCg0KCQkvLyBSZXByb2dyYW0gdGhlIHBsYWNlcy9w bGFjZVRhYmxlDQoJCSRhcnRrZXkgPSBhcnJheV9zZWFyY2goJ2FydGljbGVzJywgJHBsYWNl cyk7DQoJCWlmICgkYXJ0a2V5ICE9PSBmYWxzZSkgew0KCQkJdW5zZXQoJHBsYWNlc1skYXJ0 a2V5XSk7DQoJCX0NCg0KCQkvLyBwYWdlcy9mb3Jtcy9zZWN0aW9ucyB0byBpZ25vcmUgYmVj YXVzZSB0aGV5IGFyZSBzdGF0aWMgYW5kIGNhbm5vdCBiZSBkZWxldGVkDQoJCSRlc3NlbnRp YWxzID0gYXJyYXkoDQoJCQknc2VjdGlvbnMnID0+IGFycmF5KCdkZWZhdWx0JyksDQoJCQkn cGFnZXMnID0+IGFycmF5KCdlcnJvcl9kZWZhdWx0JyksDQoJCQknZm9ybXMnID0+IGFycmF5 KCdjb21tZW50cycsJ2NvbW1lbnRzX2Rpc3BsYXknLCdjb21tZW50X2Zvcm0nLCdkZWZhdWx0 JywnTGlua3MnLCdmaWxlcycpLCAvLyBjb3BpZWQgZnJvbSB0eHBfZm9ybXMNCgkJKTsNCg0K CQkkcGxhY2VzW10gPSAncGx1Z2lucyc7DQoJCSRwbGFjZXNbXSA9ICdzdHlsZXNoZWV0cyc7 DQoNCgkJJHBsYWNlVGFibGVbJ3BsdWdpbnMnXSA9IGFycmF5KCd0eHBfcGx1Z2luJywgJ25h bWUnLCAnbmFtZScsIGdUeHQoJ3BsdWdpbnMnKSwgJ3BsdWdpbicsICcnLCAnIycsICd7bmFt ZX0nKTsNCgkJJHBsYWNlVGFibGVbJ3N0eWxlc2hlZXRzJ10gPSBhcnJheSgndHhwX2Nzcycs ICduYW1lJywgJ25hbWUnLCBzbWRfd3VfZ1R4dCgnc3R5bGVzaGVldHMnKSwgJ2NzcycsICcn LCAnbmFtZScsICd7bmFtZX0nKTsNCg0KCQkkcGxhY2VUYWJsZVsnZm9ybXMnXVswXSA9ICJT RUxFQ1QgdGYubmFtZSBGUk9NICIgLnNhZmVfcGZ4KCd0eHBfZm9ybScpLiAiIEFTIHRmIFdI RVJFIHRmLm5hbWUgTk9UIElOICgiIC5kb1F1b3RlKGltcGxvZGUoIicsJyIsJGVzc2VudGlh bHNbJ2Zvcm1zJ10pKS4gIikgT1JERVIgQlkgdGYubmFtZSI7IC8vIFdvdWxkIGJlIG5pY2Ug dG8gZXhjbHVkZSBmb3JtcyB0aGF0IHJlZmVyZW5jZSBmb3JtcyBoZXJlIGluc3RlYWQgb2Yg aXRlcmF0aW5nIHRocm91Z2ggdGhlbSBsYXRlcg0KCQkkcGxhY2VUYWJsZVsncGFnZXMnXVsw XSA9ICJTRUxFQ1QgdHAubmFtZSBGUk9NICIgLnNhZmVfcGZ4KCd0eHBfc2VjdGlvbicpLiAi IEFTIHRzIFJJR0hUIEpPSU4gIiAuc2FmZV9wZngoJ3R4cF9wYWdlJykuICIgQVMgdHAgT04g dHMucGFnZSA9IHRwLm5hbWUgV0hFUkUgdHMucGFnZSBJUyBOVUxMIEFORCB0cC5uYW1lIE5P VCBJTiAoIiAuZG9RdW90ZShpbXBsb2RlKCInLCciLCRlc3NlbnRpYWxzWydwYWdlcyddKSku ICIpIE9SREVSIEJZIHRwLm5hbWUiOw0KCQkkcGxhY2VUYWJsZVsncGx1Z2lucyddWzBdID0g IlNFTEVDVCB0Zy5uYW1lLCB0Zy5jb2RlIEZST00gIiAuc2FmZV9wZngoJ3R4cF9wbHVnaW4n KS4gIiBBUyB0ZyBXSEVSRSB0eXBlIDwgIiAuKCRwbHVndHlwZSsxKS4gIiBBTkQgdGcubmFt ZSAhPSAnc21kX3doZXJlX3VzZWQnIE9SREVSIEJZIHRnLm5hbWUiOw0KCQkkcGxhY2VUYWJs ZVsnc2VjdGlvbnMnXVswXSA9ICJTRUxFQ1QgdHMubmFtZSBGUk9NICIgLnNhZmVfcGZ4KCd0 eHBfc2VjdGlvbicpLiAiIEFTIHRzIExFRlQgSk9JTiAiIC5zYWZlX3BmeCgndGV4dHBhdHRl cm4nKS4gIiBBUyB0eHAgT04gdHMubmFtZSA9IHR4cC5zZWN0aW9uIFdIRVJFIElEIElTIE5V TEwgQU5EIHRzLm5hbWUgTk9UIElOICgiIC5kb1F1b3RlKGltcGxvZGUoIicsJyIsJGVzc2Vu dGlhbHNbJ3NlY3Rpb25zJ10pKS4gIikgT1JERVIgQlkgdHMubmFtZSI7DQoJCSRwbGFjZVRh YmxlWydzdHlsZXNoZWV0cyddWzBdID0gIlNFTEVDVCB0Yy5uYW1lIEZST00gIiAuc2FmZV9w ZngoJ3R4cF9zZWN0aW9uJykuICIgQVMgdHMgUklHSFQgSk9JTiAiIC5zYWZlX3BmeCgndHhw X2NzcycpLiAiIEFTIHRjIE9OIHRzLmNzcyA9IHRjLm5hbWUgV0hFUkUgdHMucGFnZSBJUyBO VUxMIE9SREVSIEJZIHRjLm5hbWUiOw0KDQoJCS8vIEZvciAiYXdrd2FyZCIgcXVlcmllcyB0 aGF0IGNhbid0IGJlIGRvbmUgaW4gb25lIHNob3QsIHRoZXJlIGFyZSB0aHJlZSB0aGluZ3Mg cmVxdWlyZWQgcGVyICRwbGFjZToNCgkJLy8gIDE6IHR4cCB0YWJsZSBuYW1lDQoJCS8vICAy OiBsaXN0IG9mIGNvbHVtbnMgdG8gY29tcGFyZQ0KCQkvLyAgMzogbWV0aG9kIG9mIGNvbXBh cmlzb24gcGVyIGNvbHVtbiAoMCA9ICJkaXJlY3QgbWF0Y2giLCAxID0gImxpa2UiKQ0KCQkk Y1RhYmxlID0gYXJyYXkoDQoJCQkncGx1Z2lucycgPT4gYXJyYXkoDQoJCQkJJ3R4cF9mb3Jt JyA9PiBhcnJheSgnZm9ybScgPT4gMSksDQoJCQkJJ3R4cF9wYWdlJyA9PiBhcnJheSgndXNl cl9odG1sJyA9PiAxKSwNCgkJCQkndGV4dHBhdHRlcm4nID0+IGFycmF5KCdCb2R5JyA9PiAx LCAnRXhjZXJwdCcgPT4gMSksDQoJCQkpLA0KCQkJJ2Zvcm1zJyA9PiBhcnJheSgNCgkJCQkn dHhwX2Zvcm0nID0+IGFycmF5KCdmb3JtJyA9PiAxKSwNCgkJCQkndHhwX3BhZ2UnID0+IGFy cmF5KCd1c2VyX2h0bWwnID0+IDEpLA0KCQkJCSd0ZXh0cGF0dGVybicgPT4gYXJyYXkoJ0Jv ZHknID0+IDEsICdFeGNlcnB0JyA9PiAxLCAnb3ZlcnJpZGVfZm9ybScgPT4gMCksDQoJCQkp LA0KCQkpOw0KDQoJCS8vIFdvcmsgb24gYSBjb2x1bW4gYXQgYSB0aW1lDQoJCWZvcmVhY2gg KCRwbGFjZXMgYXMgJHBsYWNlKSB7DQoJCQkkY3JvdyA9ICRwbGFjZVRhYmxlWyRwbGFjZV07 DQoJCQkkY29sUmVmcyA9IGRvX2xpc3QoJGNyb3dbMl0pOw0KCQkJJGNvbEhlYWRbXSA9IHRk KHN0cm9uZygkY3Jvd1szXSAuICgoJHBsYWNlID09ICdwbHVnaW5zJykgPyAoKCRwbHVndHlw ZT09MCkgPyBzbWRfd3VfZ1R4dCgnY2xpZW50X3BsdWdpbnMnKSA6IHNtZF93dV9nVHh0KCdh ZG1pbl9wbHVnaW5zJykgKSA6ICcnKSApKTsNCgkJCSRycyA9IHN0YXJ0Um93cygkY3Jvd1sw XSk7DQoJCQlpZiAoJHJzKSB7DQoJCQkJJG91dCA9ICc8dWw+JzsNCgkJCQl3aGlsZSAoJHJv dyA9IG5leHRSb3coJHJzKSkgew0KCQkJCQkvLyBDb3VudCB0aGUgbm8gb2YgcmVjb3JkcyBt YXRjaGluZyB0aGlzIG5hbWUgaW4gZWFjaCB0YWJsZS4NCgkJCQkJLy8gQW55IHRpbWUgdGhp cyBnb2VzIGFib3ZlIHplcm8sIHRoZSBpdGVtIGlzIHVzZWQgYW5kIGl0IGNhbiBiZSBpZ25v cmVkDQoJCQkJCSRmbmFsaWFzZXMgPSBhcnJheSgpOw0KCQkJCQlpZiAoYXJyYXlfa2V5X2V4 aXN0cygkcGxhY2UsICRjVGFibGUpKSB7DQoJCQkJCQkvLyBQbHVnaW4gZnVuY3Rpb25zIGFy ZSBub3QgbmVjZXNzYXJpbHkgdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiBpdHNlbGYuDQoJCQkJ CQkvLyBGaW5kIGFsbCBmdW5jdGlvbiBkZWZpbml0aW9ucyBhbmQgYnVpbGQgYSBsaXN0IG9m IGFsaWFzZXMNCgkJCQkJCWlmICgkcGxhY2UgPT0gJ3BsdWdpbnMnKSB7DQoJCQkJCQkJJHJl ID0gJy9mdW5jdGlvblxzKyhbQS1aYS16MC05X10rKVxzKlwoLyc7DQoJCQkJCQkJJG51bSA9 IHByZWdfbWF0Y2hfYWxsKCRyZSwgJHJvd1snY29kZSddLCAkZm5hbGlhc2VzKTsNCgkJCQkJ CX0NCg0KCQkJCQkJJHJlY3MgPSAwOw0KCQkJCQkJZm9yZWFjaCAoJGNUYWJsZVskcGxhY2Vd IGFzICR0YmwgPT4gJGNvbEluZm8pIHsNCgkJCQkJCQlpZiAoJHJlY3MgPT0gMCkgew0KCQkJ CQkJCQkkd2hlcmUgPSBhcnJheSgpOw0KCQkJCQkJCQlmb3JlYWNoICgkY29sSW5mbyBhcyAk Y29sTmFtZSA9PiAkcXJ5VHlwZSkgew0KCQkJCQkJCQkJJHdoZXJlW10gPSAkY29sTmFtZSAu ICgoJHFyeVR5cGU9PTApID8gIiA9ICciIC4kcm93WyRjb2xSZWZzWzBdXS4gIiciIDogIiBM SUtFICclIiAuJHJvd1skY29sUmVmc1swXV0uICIlJyIpOw0KCQkJCQkJCQkJaWYgKGNvdW50 KCRmbmFsaWFzZXMpID4gMSkgew0KCQkJCQkJCQkJCWZvcmVhY2ggKCRmbmFsaWFzZXNbMV0g YXMgJGZuYWxpYXMpIHsNCgkJCQkJCQkJCQkJJHdoZXJlW10gPSAkY29sTmFtZSAuICgoJHFy eVR5cGU9PTApID8gIiA9ICciIC4kZm5hbGlhcy4gIiciIDogIiBMSUtFICclIiAuJGZuYWxp YXMuICIlJyIpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJ CQkkd2hlcmUgPSBqb2luKCIgT1IgIiwgJHdoZXJlKTsNCgkJCQkJCQkJJHJlY3MgKz0gc2Fm ZV9jb3VudCgkdGJsLCAkd2hlcmUpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCg0KCQkJCQkJLy8g SWYgdGhlIGl0ZW0gaGFzIG5vdCBiZWVuIGZvdW5kLCBmbGFnIGl0DQoJCQkJCQlpZiAoJHJl Y3MgPT0gMCkgew0KCQkJCQkJCSRjb2xOYW1lcyA9ICRjb2xSZWZzOw0KCQkJCQkJfSBlbHNl IHsNCgkJCQkJCQkkY29sTmFtZXMgPSBhcnJheSgpOw0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ug ew0KCQkJCQkJJGNvbE5hbWVzID0gJGNvbFJlZnM7DQoJCQkJCX0NCg0KCQkJCQkvLyBNYWtl IHVwIHRoZSBzdHJpbmcgdG8gZGlzcGxheSwgYW5kIGh5cGVybGluayBpdCBpZiBkaXJlY3Rl ZA0KCQkJCQkkaGxpbmsgPSAnJzsNCgkJCQkJJHZhcnMgPSAnJzsNCgkJCQkJZm9yZWFjaCAo JGNvbE5hbWVzIGFzICRjb2wpIHsNCgkJCQkJCSRmcm9tID0gJ3snLiRjb2wuJ30nOw0KCQkJ CQkJaWYgKHN0cnBvcygkY3Jvd1s3XSwgJGZyb20pICE9PSBmYWxzZSkgew0KCQkJCQkJCWlm ICgkY3Jvd1s2XSA9PSAiIyIpIHsNCgkJCQkJCQkJJHZhcnMgPSBqb2luX3FzKGFycmF5KCJl dmVudCIgPT4gJGNyb3dbNF0sICJzdGVwIiA9PiAkY3Jvd1s1XSkpLiRjcm93WzZdLnN0cnRy KCRjcm93WzddLCBhcnJheSgkZnJvbSA9PiAkcm93WyRjb2xdKSk7DQoJCQkJCQkJfSBlbHNl IHsNCgkJCQkJCQkJJHZhcnMgPSBqb2luX3FzKGFycmF5KCJldmVudCIgPT4gJGNyb3dbNF0s ICJzdGVwIiA9PiAkY3Jvd1s1XSwgJGNyb3dbNl0gPT4gc3RydHIoJGNyb3dbN10sIGFycmF5 KCRmcm9tID0+ICRyb3dbJGNvbF0pKSkpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRo bGluayAuPSAkcm93WyRjb2xdLiIgIjsNCgkJCQkJfQ0KCQkJCQkkb3V0IC49ICgkaGxpbmsp ID8gJzxsaT4nIC4gKCgkdmFycykgPyAnPGEgaHJlZj0iaW5kZXgucGhwJy4kdmFycy4nIj4n LiRobGluay4nPC9hPiAnIDogJGhsaW5rKSAuICc8L2xpPic6ICcnOw0KCQkJCX0NCgkJCQkk b3V0IC49ICc8L3VsPic7DQoJCQkJJGNvbEJvZHlbXSA9IHRkKCRvdXQpOw0KCQkJfSBlbHNl IHsNCgkJCQkkY29sQm9keVtdID0gdGQoc21kX3d1X2dUeHQoJ25vX29ycGhhbnNfZm91bmQn KSk7DQoJCQl9DQoJCX0NCgkJZWNobyB0cihqb2luKCIgIiwgJGNvbEhlYWQpKTsNCgkJZWNo byB0cihqb2luKCIgIiwgJGNvbEJvZHkpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAt IGxvY2FsaXNlIGFzIHJlcXVpcmVkDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfd3VfZ1R4 dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FkbWlu X3BsdWdpbnMnID0+ICcgWyBBK0MgXScsDQoJCSdjbGllbnRfcGx1Z2lucycgPT4gJyBbIEMg XScsDQoJCSdleGNsdXNpb24nID0+ICdFeGNsdWRlJywNCgkJJ2luY2x1c2lvbicgPT4gJ0lu Y2x1ZGUnLA0KCQknZmlsdGVyJyA9PiAnRmlsdGVyOicsDQoJCSdtYXRjaF9jYXNlJyA9PiAn TWF0Y2ggY2FzZScsDQoJCSdub19vcnBoYW5zX2ZvdW5kJyA9PiAnTm8gb3JwaGFucyBmb3Vu ZC4nLA0KCQknb3JwaGFuX3Jlc3VsdHMnID0+ICdQb3NzaWJsZSBvcnBoYW5zJywNCgkJJ3Nl YXJjaF9sYmwnID0+ICdGaW5kOicsDQoJCSdzZWFyY2hfd2hlcmVfbGJsJyA9PiAnTG9vayBp bjonLA0KCQknc3R5bGVzaGVldHMnID0+ICdTdHlsZXNoZWV0cycsDQoJCSdzbWRfd3UnID0+ ICdXaGVyZSB1c2VkJywNCgkJJ3dob2xlX3dvcmQnID0+ICdXaG9sZSB3b3JkcycsDQoJKTsN CglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6 MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6ImhlbHAiO3M6NjUyMToiCTxwPjxkaXYg aWQ9InNtZF9oZWxwIj48L3A+CgoJPGgxPnNtZF93aGVyZV91c2VkPC9oMT4KCgk8cD5SZWFs bHkgc2ltcGxlIGFkbWluLXNpZGUgcGx1Z2luIHRvIGhlbHAgZmluZCB3aGF0IHlvdSBuZWVk IHRvIGVkaXQvZGVsZXRlLiBJZiB5b3UgaGF2ZSBhIHRvbm5lIG9mIGZvcm1zIG9yIHBhZ2Vz IGFuZCB3YW50IHRvIHRpZHkgc3R1ZmYgdXAgaXQgY2FuIGJlIGEgYml0IG9mIGEgcGFpbiB0 byBmaW5kIHdoYXQmIzgyMTc7cyBhY3R1YWxseSBpbiB1c2UuPC9wPgoKCTxwPlNvIHVzZSB0 aGlzIHBsdWdpbiB0byBzZWFyY2ggeW91ciBzZWN0aW9ucywgcGFnZXMsIGZvcm1zIG9yIGFy dGljbGVzIGZvciByZWZlcmVuY2VzIHRvIHBsdWdpbnMsIG9yIG90aGVyIHBhZ2VzL2Zvcm1z IG9yIGV2ZW4ganVzdCBwbGFpbiB0ZXh0IGluIGFydGljbGVzLjwvcD4KCgk8aDIgY2xhc3M9 ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPjwvcD4KCgk8aDIgY2xhc3M9Imluc3Rh bGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0 aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcv cGx1Z2lucy85ODQvc21kX3doZXJlX3VzZWQiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRo ZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+ LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1 Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92 aWV3dG9waWMucGhwP2lkPTI3NDkzIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8g YW5kIHRvIHJlcG9ydCB0aGUgc3VjY2VzcyAob3Igb3RoZXJ3aXNlKSBvZiB0aGlzIHBsdWdp bi48L3A+CgoJPHA+VW5pbnN0YWxsIGJ5IHNpbXBseSBkZWxldGluZyB0aGUgcGx1Z2luIGZy b20gdGhlIEFkbWluLSZndDtQbHVnaW5zIHBhbmUuPC9wPgoKCTxoMiBjbGFzcz0idXNhZ2Ui PlVzYWdlPC9oMj4KCgk8cD5WaXNpdCB0aGUgRXh0ZW5zaW9ucyB0YWIgYW5kIENsaWNrICYj ODIxNjtXaGVyZSB1c2VkJiM4MjE3OyB0byBhY2Nlc3MgdGhlIHNlYXJjaCBmb3JtLiBUeXBl IHNvbWUgc3R1ZmYgdG8gZmluZCwgc2VsZWN0IHdoZXJlIHlvdSB3YW50IHRvIGxvb2sgYW5k IGhpdCAmIzgyMTY7U2VhcmNoJiM4MjE3OyBvciBwcmVzcyBFbnRlci4gWW91ciByZXF1ZXN0 ZWQgbG9jYXRpb25zIHdpbGwgYmUgc2VhcmNoZWQgZm9yIHRoYXQgdGVybSBhbmQgdGhlIHJl c3VsdHMgdGFidWxhdGVkLCB3aXRoIGh5cGVybGlua3MgdG8gdGhlIG9mZmVuZGluZyBpdGVt cyBzbyB5b3UgY2FuIHF1aWNrbHkgZWRpdCB0aGVtLjwvcD4KCgk8cD5Zb3UgY2FuIGRlY2lk ZSB3aGV0aGVyIHRvIHNlYXJjaCBmb3IgdGhlIHRlcm0gKCYjODIyMDtJbmNsdWRlJiM4MjIx Oykgb3IgdG8gc2VhcmNoIGZvciBzdHVmZiA8c3BhbiBjbGFzcz0iY2FwcyI+Tk9UPC9zcGFu PiBjb250YWluaW5nIHRoYXQgdGVybSAoJiM4MjIwO0V4Y2x1ZGUmIzgyMjE7KS4gWW91IG1h eSBhbHNvIGNob29zZSB3aGV0aGVyIHlvdXIgc2VhcmNoIHRlcm0gbWF0Y2hlcy9kb2VzIG5v dCBtYXRjaCBhIHdob2xlIHdvcmQgb3IgaXMgY2FzZSBzZW5zaXRpdmUuPC9wPgoKCTxwPlRo aXMgaXMgd2hhdCB0aGUgcGx1Z2luIGxvb2tzIGF0IHdoZW4geW91IHNlbGVjdCBhIHBhcnRp Y3VsYXIgY2hlY2tib3ggZnJvbSB0aGUgJiM4MjIwO0xvb2sgaW4mIzgyMjE7IHJvdzo8L3A+ CgoJPHVsPgoJCTxsaT4mIzgyMTY7U2VjdGlvbnMmIzgyMTc7IHNlYXJjaGVzIGV2ZXJ5IFNl Y3Rpb24gZm9yIHBhZ2VzIG9yIHN0eWxlc2hlZXRzIHdpdGggdGhlIG1hdGNoaW5nIG5hbWU8 L2xpPgoJCTxsaT4mIzgyMTY7UGFnZXMmIzgyMTc7IHNlYXJjaGVzIGV2ZXJ5IFBhZ2UgZm9y IGZvcm1zIC8gcGx1Z2lucyAvIHRleHQgd2l0aCB0aGUgbWF0Y2hpbmcgbmFtZTwvbGk+CgkJ PGxpPiYjODIxNjtGb3JtcyYjODIxNzsgc2VhcmNoZXMgZXZlcnkgRm9ybSBmb3IgcGx1Z2lu cyAvIG90aGVyIGZvcm1zIC8gdGV4dCB3aXRoIHRoZSBtYXRjaGluZyBuYW1lPC9saT4KCQk8 bGk+JiM4MjE2O0FydGljbGVzJiM4MjE3OyBzZWFyY2hlcyBldmVyeSBBcnRpY2xlIHNlY3Rp b24sIGJvZHksIGV4Y2VycHQsIG92ZXJyaWRlX2Zvcm0sIHRpdGxlIGFuZCBrZXl3b3JkIGZv ciBtZW50aW9uIG9mIHRoZSB0ZXh0IHlvdSBzcGVjaWZ5PC9saT4KCTwvdWw+CgoJPHA+SWYs IGhvd2V2ZXIsIHlvdSBsZWF2ZSB0aGUgJiM4MjE2O0ZpbmQmIzgyMTc7IGJveCBlbXB0eSBh bmQgY2xpY2sgJiM4MjE2O1NlYXJjaCYjODIxNzsgdGhlIHBsdWdpbiB3aWxsIHNlYXJjaCBm b3Igb3JwaGFucy4gT3JwaGFucyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOjwvcD4KCgk8dWw+ CgkJPGxpPkFueSBQYWdlIHRoYXQgaXMgbm90IGFzc2lnbmVkIHRvIGEgU2VjdGlvbjwvbGk+ CgkJPGxpPkFueSBTdHlsZXNoZWV0IHRoYXQgaXMgbm90IGFzc2lnbmVkIHRvIGEgU2VjdGlv bjwvbGk+CgkJPGxpPkFueSBTZWN0aW9uIHRoYXQgaGFzIG5vIEFydGljbGVzIGluIGl0IChl eGNsdWRpbmcg4oCYZGVmYXVsdOKAmSB3aGljaCBjYW5ub3QgaGF2ZSBhbiBhcnRpY2xlIGFu eXdheSk8L2xpPgoJCTxsaT5BbnkgUGx1Z2luIHRoYXQgaXMgbm90IHJlZmVyZW5jZWQgZnJv bSBhbiBBcnRpY2xlIChib2R5L2V4Y2VycHQpIG9yIGFub3RoZXIgRm9ybSBvciBQYWdlPC9s aT4KCQk8bGk+QW55IEZvcm0gdGhhdCBoYXMgbm8gcmVmZXJlbmNlIHRvIGl0IGluIGFueSBB cnRpY2xlIChib2R5L2V4Y2VycHQvb3ZlcnJpZGVfZm9ybSkgb3IgYW5vdGhlciBGb3JtIG9y IFBhZ2U8L2xpPgoJPC91bD4KCgk8cD5Ob3Rlczo8L3A+CgoJPHVsPgoJCTxsaT5PcnBoYW5l ZCBhcnRpY2xlcyBkb24mIzgyMTc7dCBtYWtlIHNlbnNlIHNvIHRoZXkgYXJlIG9taXR0ZWQu IFRoZSBjaGVja2JveCBpcyBpZ25vcmVkPC9saT4KCQk8bGk+RXNzZW50aWFsIHNlY3Rpb25z IC8gcGFnZXMgLyBmb3JtcyB0aGF0IGNhbm5vdCBiZSBkZWxldGVkIGFyZSBub3QgbGlzdGVk PC9saT4KCQk8bGk+U3R5bGVzaGVldHMgYW5kIFBsdWdpbnMgYXJlIGFsd2F5cyBkaXNwbGF5 ZWQgYmVjYXVzZSB0aGVyZSBhcmUgbm8gY2hlY2sgYm94ZXMgZm9yIHRoZW0uIFRoZSByZWFz b24gaXMgdGhhdCB0aGUgcGx1Z2luIGRvZXMgbm90IGFsbG93IHNlYXJjaGluZyB3aXRoaW4g YSBwbHVnaW4gb3IgYSBzdHlsZXNoZWV0IGZvciBhIHJlZmVyZW5jZSB0byBhIHdvcmQsIGJ1 dCBpdCBkb2VzIGNoZWNrIG90aGVyIHBsYWNlcyBmb3IgcmVmZXJlbmNlcyA8ZW0+dG88L2Vt PiBwbHVnaW5zIGFuZCBzdHlsZXNoZWV0czwvbGk+CgkJPGxpPlBsdWdpbiBsaXN0IGNhbiBi ZSB0b2dnbGVkIGJldHdlZW4gdGhlIGRlZmF1bHQgY2xpZW50LW9ubHkgcGx1Z2lucyBvciBi b3RoIGNsaWVudCBhbmQgYWRtaW4gcGx1Z2lucy4gQ2xpY2sgJiM4MjE2O1NlYXJjaCYjODIx NzsgYWdhaW4gdG8gdG9nZ2xlPC9saT4KCQk8bGk+SnVzdCBiZWNhdXNlIGFuIGl0ZW0gaXMg bGlzdGVkIGFzIG9ycGhhbmVkIGRvZXMgPGVtPm5vdCBuZWNlc3NhcmlseSBtZWFuIGl0IGlz IG5vdCB1c2VkPC9lbT4hIEZvciBleGFtcGxlLCBydm1fbWFpbnRlbmFuY2UgY2hlY2tzIGZv ciB0aGUgZXhpc3RlbmNlIG9mIGFuIDxjb2RlPmVycm9yXzUwMzwvY29kZT4gUGFnZS4gU2lu Y2UgaXQgaXMgbmV2ZXIgYXNzaWduZWQgdG8gYSBTZWN0aW9uIGl0IHdpbGwgYmUgbGlzdGVk IGFzIG9ycGhhbmVkLiBJZiB5b3UgaGF2ZSBhIGRlZGljYXRlZCBzdHlsZXNoZWV0IGZvciBt YWludGVuYW5jZSBtb2RlIHRoYXQsIHRvbywgd2lsbCBiZSBzaG93biBhcyBvcnBoYW5lZC4g SW4gc2hvcnQsIGJlIGNhcmVmdWwgYW5kIG1ha2UgYSBiYWNrdXAgOi0pPC9saT4KCQk8bGk+ UGx1Z2lucyBzdWNoIGFzIHBhcF9jb250YWN0X2NsZWFuZXIgYW5kIHJ2bV9tYWludGVuYW5j ZSBhcmUgbGlzdGVkIGFzIG9ycGhhbnMgZXZlbiB0aG91Z2ggdGhleSBhcmUgdXNlZCBieSBv dGhlciBwbHVnaW5zIC8gdXN1YWxseSBkaXNhYmxlZC4gSWYgeW91IGFyZSB1bnN1cmUgYWJv dXQgYSBwbHVnaW4sIGNoZWNrIGl0IGJ5IHR5cGluZyBhIHBhcnRpYWwgdGFnIG5hbWUgaW50 byB0aGUgc2VhcmNoIGJveDwvbGk+Cgk8L3VsPgoKCTxoMiBjbGFzcz0iY2hhbmdlbG9nIj5D aGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTYgSnVuIDA4IHwgdjAuMSB8IEluaXRpYWwg cmVsZWFzZTwvbGk+CgkJPGxpPjE2IEp1biAwOCB8IHYwLjExIHwgQWRkZWQgc2VjdGlvbiBz ZWFyY2ggYW5kIG92ZXJyaWRlX2Zvcm08L2xpPgoJCTxsaT4xNiBKdW4gMDggfCB2MC4xMiB8 IEFkZGVkIGluY2x1ZGUvZXhjbHVkZSAodGhhbmtzIG1yZGFsZSk8L2xpPgoJCTxsaT4xNiBK dW4gMDggfCB2MC4xMyB8IEFkZGVkIGFiaWxpdHkgdG8gbWF0Y2ggd2hvbGUgd29yZHMgKHRo YW5rcyB6YW56YSk8L2xpPgoJCTxsaT4xNyBKdW4gMDggfCB2MC4xNCB8IEFkZGVkIG9ycGhh biBzZWFyY2ggKHRoYW5rcyB1bGkvbmV0LWNhcnZlcik8L2xpPgoJCTxsaT4xOCBKdW4gMDgg fCB2MC4xNSB8IEZpeGVkIHBsdWdpbiBsaXN0IHNvIGl0IGRvZXMgYSBkZWVwIHNlYXJjaCBp bnNpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciB0YWcgbmFtZXM8L2xpPgoJCTxsaT4xOCBKdW4g MDggfCB2MC4xNiB8IEFkZGVkIGFkbWluL2NsaWVudCBzaWRlIHBsdWdpbiB0b2dnbGUgOyBz ZWFyY2hlcyBub3cgZXh0ZW5kZWQgdG8gdGl0bGUgYW5kIGtleXdvcmRzIChib3RoIHRoYW5r cyB1bGkpPC9saT4KCQk8bGk+MTggSnVuIDA4IHwgdjAuMTcgfCBBcnRpY2xlcyBhcmUgbGlu a2VkIHdpdGggSUQgYW5kIHRpdGxlICh0aGFua3MgdWxpKTwvbGk+CgkJPGxpPjE4IEp1biAw OCB8IHYwLjE4IHwgQWRkZWQgY2FzZSBzZW5zaXRpdmUgc2VhcmNoZXMgKHRoYW5rcyBnZW9m Zjc3Nyk8L2xpPgoJCTxsaT4xMSBNYXIgMDkgfCB2MC4xOSB8IEFkZGVkIGF1dG8tZm9jdXMg dG8gc2VhcmNoIGJveDwvbGk+Cgk8L3VsPgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVH SU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVs cCB7IGxpbmUtaGVpZ2h0OjEuMyA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJv bGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7 IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZv bnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1j b2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBw YWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7 IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3Zlciwg I3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9u ZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9 CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7 IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29s b3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAg aDMgeyBjb2xvcjogIzY5MzsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBs ZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1 cHBlcmNhc2U7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJh bnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdHQtbmFtZSB7IGZvbnQtd2VpZ2h0 OmJvbGQ7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4 IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6MTAwJTsgdGV4dC1hbGln bjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxw IHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwO30KPC9zdHlsZT4K PCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJkZTMx NGExMDM2YjUxZWYwNGQyZDM0OTdjYjI0MDQyZCI7fQ==