# Name: spi_imgtmce_upload v0.1 # Type: Admin/Public plugin # Adaptation of bot_image_upload to insert images into body using kuo_tinymce_cdn # Author: Stacey Irvin # URL: # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE4OiJzcGlfaW1ndG1jZV91cGxvYWQiO3M6NjoiYXV0aG9y IjtzOjEyOiJTdGFjZXkgSXJ2aW4iO3M6MTA6ImF1dGhvcl91cmkiO3M6MDoiIjtzOjc6InZl cnNpb24iO3M6MzoiMC4xIjtzOjExOiJkZXNjcmlwdGlvbiI7czo3OToiQWRhcHRhdGlvbiBv ZiBib3RfaW1hZ2VfdXBsb2FkIHRvIGluc2VydCBpbWFnZXMgaW50byBib2R5IHVzaW5nIGt1 b190aW55bWNlX2NkbiI7czo0OiJjb2RlIjtzOjI1NTU3OiIvLzw/DQoNCglpZihAdHhwaW50 ZXJmYWNlID09ICdhZG1pbicpIHsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NwaV9pbWd0bWNl X3VwbG9hZCcsJ2FkbWluX3NpZGUnLCAnaGVhZF9lbmQnKTsNCgkJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NwaV9pbWd0bWNlX2NzcycsJ2FkbWluX3NpZGUnLCdoZWFkX2VuZCcpOw0KIAkJc3Bp X2ltZ3RtY2VfaW1nKCk7DQoJfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KCUds b2JhbCBwcmVmZXJlbmNlcyAtIENvbmZpZ3VyYXRpb24uIFJlYWQgY29tbWVudHMgYW5kIG1v ZGlmeSB0byB5b3VyIG5lZWRzLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KCWZ1 bmN0aW9uIHNwaV9pdXRtY2VfcHJlZnMoKSB7DQpnbG9iYWwgJGV2ZW50OyANCmlmKCRldmVu dCAhPT0gJ2FydGljbGUnKSB7cmV0dXJuO30NCgkJcmV0dXJuDQoJCQlhcnJheSgNCgkJCQkn c3BpX2l1dG1jZV9maWVsZHMnID0+ICcjY3VzdG9tLTEnLCAvLyBmaWVsZHMgdG8gYmUgdXNl ZCAoY29tbWEgc2VwYXJhdGVkIHwgdXNlICNjdXN0b20tbiBmb3IgY3VzdG9tIGZpZWxkcykN CgkJCQknc3BpX2l1dG1jZV9tb25vX2xpc3QnID0+ICcnLCAvLyBmaWVsZHMgd2l0aCBzaW5n bGUgaW1hZ2UgKGNvbW1hIHNlcGFyYXRlZCB8IHVzZSAjY3VzdG9tLW4gZm9yIGNmcykNCgkJ CQknc3BpX2Nob29zZV9pbWFnZV90ZXh0JyA9PiBnVHh0KCdDaG9vc2UgaW1hZ2UnKSwgLy8g dGV4dCBmb3IgIkNob29zZSBpbWFnZXMiIGxpbmsgYW5kIGJ1dHRvbg0KCQkJCSdzcGlfaW1n dG1jZV9kZWxldGVfdGV4dCcgPT4gZ1R4dCgnRGVsZXRlIGltYWdlJyksIC8vIHRleHQgYW5k IHRpdGxlIGZvciAiZGVsZXRlIGltYWdlIiBidXR0b24NCgkJCQknc3BpX2ltZ3RtY2VfZWRp dF90ZXh0JyA9PiBnVHh0KCdFZGl0IGltYWdlJyksIC8vIHRleHQgYW5kIHRpdGxlIGZvciAi ZWRpdCBpbWFnZSIgYnV0dG9uIg0KCQkJCSdzcGlfYWRkX2ltYWdlX3RleHQnID0+IGdUeHQo J0FkZCcpLCAvLyB0ZXh0IGZvciAiYWRkIGltYWdlIiBjaGVja2JveA0KCQkJCSdzcGlfaXV0 bWNlX3NhdmVfdGV4dCcgPT4gZ1R4dCgnc2F2ZScpLCAvLyB0ZXh0IGZvciAiU2F2ZSIgYnV0 dG9uIg0KCQkJCSdzcGlfaXV0bWNlX2NhbmNlbF90ZXh0JyA9PiBnVHh0KCdjYW5jZWwnKSwg Ly8gdGV4dCBmb3IgIkNhbmNlbCIgYnV0dG9uIg0KCQkJCSdzcGlfaXV0bWNlX3Jvd19iZycg PT4gJyNlYWVhZWEnLCAvLyBzZWxlY3RlZCByb3cgYmFja2dyb3VuZA0KCQkJCSdzcGlfaXV0 bWNlX3VpX3BhdGgnID0+ICdqcXVlcnktdWktMS44LjIzLmN1c3RvbS5taW4uanMnLCAvLyBw YXRoIHRvIHRoZSBqUXVlcnkgdWkgc2NyaXB0LiBEZWZhdWx0cyB0byAndGV4dHBhdHRlcm4n IGRpcmVjdG9yeS4gU2V0IHRvICcnIGlmIHVpIGFscmVhZHkgbG9hZGVkDQoJCQkpOw0KCX0N Cg0KLyoqDQoJQ1NTIGZvciB0aGUgaW1hZ2UgdXBsb2FkLiBZb3UgYXJlIGZyZWUgdG8gbW9k aWZ5IHRoZXNlDQoJdG8gbWF0Y2ggeW91ciBvd24gYmFja2VuZCB0aGVtZS4NCiovDQoNCglm dW5jdGlvbiBzcGlfaW1ndG1jZV9jc3MoKSB7DQoNCgkJZ2xvYmFsICRldmVudDsNCgkJaWYo JGV2ZW50ICE9ICdhcnRpY2xlJykgeyAvLyBPdXRwdXRzIGNzcyBvbmx5IGluICd3cml0ZScg dGFiLg0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3Nz Ij4NCgkJCQkuc3BpX2ltZ3RtY2VfZGVsZXRlIHsNCgkJCQkJYmFja2dyb3VuZDogdXJsKCI/ c3BpX2ltZ3RtY2VfaW1nPWRlbGV0ZSIpIHRvcCBjZW50ZXIgbm8tcmVwZWF0Ow0KCQkJCQlk aXNwbGF5OmlubGluZS1ibG9jazsNCgkJCQkJdGV4dC1pbmRlbnQ6IC05OTk5OXB4Ow0KCQkJ CQl3aWR0aDoxNXB4Ow0KCQkJCQloZWlnaHQ6MjBweDsNCgkJCQl9DQoJCQkJLnNwaV9pbWd0 bWNlX2VkaXQgew0KCQkJCQliYWNrZ3JvdW5kOnVybCgiP3NwaV9pbWd0bWNlX2ltZz1lZGl0 IikgdG9wIGNlbnRlciBuby1yZXBlYXQ7DQoJCQkJCWRpc3BsYXk6aW5saW5lLWJsb2NrOw0K CQkJCQl0ZXh0LWluZGVudDotOTk5OTlweDsNCgkJCQkJd2lkdGg6MTVweDsNCgkJCQkJaGVp Z2h0OjIwcHg7DQoJCQkJCW1hcmdpbi1yaWdodDogNXB4Ow0KCQkJCX0NCgkJCQkjc3BpX2l1 dG1jZV9sb2FkaW5nIHsNCgkJCQkJYmFja2dyb3VuZDojMDAwIHVybCgiP3NwaV9pbWd0bWNl X2ltZz1zcGlfaXV0bWNlX2xvYWRpbmciKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDsNCgkJ CQkJdGV4dC1pbmRlbnQ6LTk5OTk5cHg7DQoJCQkJCXdpZHRoOjUwcHg7DQoJCQkJCWhlaWdo dDo1MHB4Ow0KCQkJCQlwYWRkaW5nOjEwcHg7DQoJCQkJCXBvc2l0aW9uOmZpeGVkOw0KCQkJ CQlsZWZ0OjUwJTsNCgkJCQkJbWFyZ2luLWxlZnQ6LTMwcHg7DQoJCQkJCXRvcDo1MCU7DQoJ CQkJCW1hcmdpbi10b3A6LTMwcHg7DQoJCQkJCXotaW5kZXg6OTk5OTsNCgkJCQkJLW1vei1i b3JkZXItcmFkaXVzOjEwcHg7DQoJCQkJCS13ZWJraXQtYm9yZGVyLXJhZGl1czoxMHB4Ow0K CQkJCQlib3JkZXItcmFkaXVzOiAxMHB4Ow0KCQkJCX0NCgkJCQkjc3BpX2l1dG1jZV9mYWRl IHsNCgkJCQkJZGlzcGxheTogbm9uZTsNCgkJCQkJYmFja2dyb3VuZDogIzAwMDsNCgkJCQkJ cG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7DQoJCQkJCXdpZHRoOiAxMDAlOyBo ZWlnaHQ6IDEwMCU7DQoJCQkJCW9wYWNpdHk6IC44MDsNCgkJCQkJei1pbmRleDogOTk5Ow0K CQkJCX0NCgkJCQkjc3BpX2l1dG1jZV9pZnJhbWUgew0KCQkJCQl3aWR0aDoxMDAlOw0KCQkJ CX0NCgkJCQkjc3BpX2l1dG1jZV9pZnJhbWVfY29udGFpbmVyIHsNCgkJCQkgICAgLyogaGVp Z2h0IGFuZCBtYXJnaW4tdG9wIGFyZSBzZXQgYnkganMgKi8NCgkJCQkgICAgZGlzcGxheTpu b25lOw0KCQkJCSAgICBwb3NpdGlvbjpmaXhlZDsNCgkJCQkgICAgbGVmdDo1MCU7DQoJCQkJ ICAgIHotaW5kZXg6IDk5OTk5Ow0KCQkJCQlvdmVyZmxvdzogaGlkZGVuOw0KCQkJCQliYWNr Z3JvdW5kOiAjZmZmOw0KCQkJCQl3aWR0aDo4MCU7DQoJCQkJCXBhZGRpbmc6MCAyJTsNCgkJ CQkJbWFyZ2luLWxlZnQ6IC00MiU7DQoJCQkJCXRleHQtYWxpZ246cmlnaHQ7DQoJCQkJCS1t b3otYm9yZGVyLXJhZGl1czo1cHg7DQoJCQkJCS13ZWJraXQtYm9yZGVyLXJhZGl1czoxMHB4 Ow0KCQkJCQlib3JkZXItcmFkaXVzOiAxMHB4Ow0KCQkJCQktbW96LWJveC1zaGFkb3c6IDAg MCAyMHB4ICMwMDA7DQoJCQkJCS13ZWJraXQtYm94LXNoYWRvdzogMCAwIDIwcHggIzAwMDsN CgkJCQkJYm94LXNoYWRvdzogMCAwIDIwcHggIzAwMDsNCgkJCQl9DQoJCQkJI3NwaV9pdXRt Y2Vfc2F2ZSwNCgkJCQkjc3BpX2l1dG1jZV9jYW5jZWwgew0KCQkJCQliYWNrZ3JvdW5kOiM2 NjY7DQoJCQkJCWNvbG9yOiNmZmY7DQoJCQkJCWZvbnQtd2VpZ2h0OmJvbGQ7DQoJCQkJCXBh ZGRpbmc6NXB4IDEwcHg7DQoJCQkJCW1hcmdpbi1sZWZ0OjVweDsNCgkJCQkJZGlzcGxheTpp bmxpbmUtYmxvY2s7DQoJCQkJCWN1cnNvcjpwb2ludGVyOw0KCQkJCQktbW96LWJvcmRlci1y YWRpdXM6NXB4Ow0KCQkJCQktd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Ow0KCQkJCQlib3Jk ZXItcmFkaXVzOjVweDsNCgkJCQl9DQoJCQkJI3NwaV9pdXRtY2Vfc2F2ZTpob3ZlciwNCgkJ CQkjc3BpX2l1dG1jZV9jYW5jZWw6aG92ZXIgew0KCQkJCQliYWNrZ3JvdW5kOiMzMzM7DQoJ CQkJCXRleHQtZGVjb3JhdGlvbjpub25lOw0KCQkJCX0NCgkJCQkuc3BpX2l1dG1jZV91bF9j b250YWluZXIgew0KCQkJCQlwYWRkaW5nOjA7DQoJCQkJfQ0KCQkJCS5zcGlfaXV0bWNlX2lt YWdlX2NvbnRhaW5lciB7DQoJCQkJCWRpc3BsYXk6aW5saW5lLWJsb2NrOw0KCQkJCQlib3Jk ZXI6c29saWQgI2VhZWFlYSAxcHg7DQoJCQkJCWJhY2tncm91bmQ6ICNmZmY7DQoJCQkJCW1h cmdpbjowIDEwcHggMTBweCAwOw0KCQkJCQlwYWRkaW5nOjEwcHggMTBweCAwOw0KCQkJCQkt bW96LWJveC1zaGFkb3c6MnB4IDJweCA1cHggI2NjYzsNCgkJCQkJLXdlYmtpdC1ib3gtc2hh ZG93OjJweCAycHggNXB4ICNjY2M7DQoJCQkJCWJveC1zaGFkb3c6MnB4IDJweCA1cHggI2Nj YzsNCgkJCQl9DQoJCQkJLnNwaV9pdXRtY2VfaW1hZ2VfY29udGFpbmVyIHNwYW4gew0KCQkJ CQlkaXNwbGF5OmJsb2NrOw0KCQkJCQlvdmVyZmxvdzpoaWRkZW47DQoJCQkJCXBhZGRpbmct dG9wOjVweDsNCgkJCQl9DQoJCQkJLnNwaV9hZGRfaW1hZ2Ugew0KCQkJCQlkaXNwbGF5OmJs b2NrOw0KCQkJCX0NCgkJCTwvc3R5bGU+DQoJCQkNCgkJCTwhLS1baWYgbHRlIElFIDddPg0K CQkJCTxzdHlsZT4NCgkJCQkJLyotLSBzdHlsaW5nIGZvciBmdWNraW5nIGllNyBhbmQgYmVs b3cgLS0qLw0KCQkJCQkuc3BpX2l1dG1jZV9pbWFnZV9jb250YWluZXIgew0KCQkJCQkJZGlz cGxheTppbmxpbmU7DQoJCQkJCX0NCgkJCQkJLnNwaV9pbWd0bWNlX2RlbGV0ZSwNCgkJCQkJ LnNwaV9pbWd0bWNlX2VkaXQgew0KCQkJCQkJZmxvYXQ6bGVmdDsNCgkJCQkJfQ0KCQkJCTwv c3R5bGU+DQoJCQk8IVtlbmRpZl0tLT4NCgkJCQ0KCQkJPCEtLVtpZiBsdGUgSUUgNl0+DQoJ CQkJPHN0eWxlPg0KCQkJCQkvKi0tIG1pbmltYWwgc3R5bGluZyBmb3IgZnVja2luZyBpZTYg YW5kIGJlbG93IC0tKi8NCgkJCQkJI3NwaV9pdXRtY2VfZmFkZSwNCgkJCQkJI3NwaV9pdXRt Y2VfbG9hZGluZywNCgkJCQkJI3NwaV9pdXRtY2VfaWZyYW1lX2NvbnRhaW5lciB7DQoJCQkJ CQlwb3NpdGlvbjogYWJzb2x1dGU7DQoJCQkJCX0NCgkJCQkJI3NwaV9pdXRtY2VfaWZyYW1l X2NvbnRhaW5lciB7DQoJCQkJCQlib3JkZXI6IHNvbGlkICNjY2MgdGhpY2s7DQoJCQkJCX0N CgkJCQk8L3N0eWxlPg0KCQkJPCFbZW5kaWZdLS0+JzsNCgl9DQoNCi8qKg0KCUdlbmVyYXRl cyBhbmQgc3RvcmVzIHRoZSBpbWFnZXMgcmVxdWlyZWQgYnkgdGhlIGRlc2lnbi4NCglJbWFn ZSBVUkkgaXM6IGh0dHA6Ly9leGFtcGxlLmNvbS90ZXh0cGF0dGVybi8/c3BpX2ltZ3RtY2Vf aW1nPWRlbGV0ZXxlZGl0fGZpbGUNCiovDQoNCglmdW5jdGlvbiBzcGlfaW1ndG1jZV9pbWco KSB7DQoNCiAJZ2xvYmFsICRldmVudDsNCgkJaWYoJGV2ZW50ICE9ICdhcnRpY2xlJykgeyAv LyBHZW5lcmF0ZXMgaW1hZ2VzIG9ubHkgaW4gJ3dyaXRlJyB0YWIuDQoJCQlyZXR1cm47DQoJ CX0NCgkJJGltYWdlID0gZ3BzKCdzcGlfaW1ndG1jZV9pbWcnKTsNCg0KCQlpZighJGltYWdl KQ0KCQkJcmV0dXJuOw0KDQoJCXN3aXRjaCgkaW1hZ2UpIHsNCgkJCWNhc2UgJ2RlbGV0ZSc6 DQoJCQkJJGZpbGUgPSAnaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFB ZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUJHZEJUVUVBQUxHT2ZQdFJr d0FBQUNCalNGSk5BQUI2SlFBQWdJTUFBUG4vQUFDQTZRQUFkVEFBQU9wZ0FBQTZtQUFBRjIr U1g4VkdBQUFCRUVsRVFWUjQybUw0Ly84L0F5bjR6Smt6WE1oOGdBQmlZa0FDWjgrZWxRZGli UVljQUNxWENxVHRZR0lBQWNRSU1nV21HVWc5Z0lyckdCc2JYOFdpK1FxVXV4S0lHNEZxcmdN RUVOZ0FOTTBNNklhZ2FZYUJBaUNlREJCQU1BTTRnSnl2UU15RWJnaVVSdGY4RjRnNWdSYjhC Z2dnWkMrQURQa0N4TXdNK0FGSU13OVE4dzhRQnlDQTREWkNCWGlnQ29qU0RBSUFBWVRpWkNS RC9tSFIvQTlkTXdnQUJCQVRGb1hLT01TWm9ISW9BQ0NBbVBCRUZUWndCVDJkQUFRUUV3SE5m N0Y0QjhVUWdBQmlJcUFaRkI3Y1dBSVdiZ2hBQU1GY0lJWXJ0UEhFRGxnUFFBQXhRVU4vUDVC eXdoWGFXQXh4Z3VwaEFBZ2c5SnptQ01RY2VISWlCMGdOc2hoQUFNRlRJcmtBSU1BQTdrN0pV dTBZY2tRQUFBQUFTVVZPUks1Q1lJST0nOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnZWRpdCc6 DQoJCQkJJGZpbGUgPSAnaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJNQUFBQVVDQU1BQUFC WWkvWkdBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMCBVMjltZEhkaGNtVUFRV1J2 WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFDaVVFeFVSZjcrL3YzOS9iT3pzK3JxNnVIaDRk WFYxYzNOIHpiNit2cWlvcUxLeXNxNnVycW1wcWZiMjl0RFEwTzd1N3ZQejgrM3Q3ZDdlM3Ey dHJjL1B6N0N3c0xtNXVkUFQwOUhSMGQzZDNmSHggOGZUMDlNWEZ4YXFxcXNEQXdOcmEydFRV MU92cjY3R3hzZkx5OHF5c3JOZlgxN2k0dUxlM3Q4SEJ3YWVucC9yNit1enM3T0RnNE4vZiAz Ky92NzhuSnllbnA2YnU3dTcrL3Y4ek16Tm5aMmRMUzB2Ly8vMTgxdTAwQUFBQTJkRkpPVS8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vL0FLR1BUakVBQUFEYVNVUkJWSGphWWpERkJBQUIgeElERVp1Umw1 d1BSQUFHRUpNWWd6aVZpeEFOa0FBUVFrcGk0bXFvR2t6U1FBUkJBQ0RFMldYMFRJUTRtSUFz Z2dPQml3b1phUExyUyAzQ3hBSmtBQXdjU0UyUVg0Rll4RkpVQjhnQUNDaXJHeDh5a3h5ek1K Z3JrQUFRUVI0MVVYa0dSbTVSUmtCUE1BQWdnc0ptWWdLY1hNIHFpZ0JFVElGQ0NDd21MS0tu aFNyaUE1VXlCUWdnTUJpSEtJeUxGemFNQ0ZUZ0FBQ2kzRUxNWEd5SUZ3S0VFQmdGcHNZdnh5 U2h3QUMgQ0dLNUprcTRBQVFRQTVhd0FnZ2diR0lBQVlSTkRDQ0FzSWtCQkJBMk1ZQUFBd0NY VzBIKzQ4N2M3UUFBQUFCSlJVNUVya0pnZ2c9PSc7DQoJCQkJYnJlYWs7DQoJCQlkZWZhdWx0 Og0KCQkJCSRmaWxlID0gJ1IwbEdPRGxoSHdBZkFQVUFBQUFBQVAvLy94WVdGaXdzTEVKQ1Fs QlFVRnhjWENJaUlrWkdSbVJrWkJvYUdpWW1KbFJVVkY1ZVhrNU9Uakl5TWdnSUNGWldWaW9x S2hnWUdNakl5TmpZMks2dXJqbzZPbzZPam14c2JLaW9xQVFFQkphV2xyaTR1RGc0T0FZR0Jy YTJ0c3pNekFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ocERjbVZo ZEdWa0lIZHBkR2dnWVdwaGVHeHZZV1F1YVc1bWJ3QWgrUVFKQ2dBQUFDd0FBQUFBSHdBZkFB QUcvMENBY0VnVURBZ0ZBNEJpd1NRZXhLaDBlRUFrcmxkQVpidmxPRDVUcVlLQUxXdTVYSXdu UEZ3d3ltWTBHc1JnQXhyd3VKd2JDaThhQUhsWVozc1Zkd3RSQ204SmdWZ09Ed29RQUFJWEdS cG9qUXdLUkdTRENSRVNZUnNHSFlabEJGUjVBSnQyYTNrSFFsWmxFUk4yUXhNUmNBaVRlYUcy UXhKNVJuQU92MUVPY0Vkd1VNWkREM0JJY0t6TnEzQkpjSkxVQUJCd1N0ck5CdGpmM0dVR0Jk TGZDdGFkV016VXo2Y0R4Ti9JWlFNQ3ZkVEJjQUlBc2xpMGpPSFNKZVNBcW1saE5yMGF3bzdS SjE5VEpPUnFkQVhWRUVWWnlqeUt0RTNCZzNvWkUyaUs4b2VpS2tGWkdpQ2FnZ2VsU1RpQTJM aHhpWkxCU2paakJMMnNpTkJPRlE4NEx4SEErbVlFaVJKekJPN1pDUUlBSWZrRUNRb0FBQUFz QUFBQUFCOEFId0FBQnY5QWdIQklGQXdJQlFQQVVDQU1CTVNvZEhoQUpLNVhBUGFLT0V5bkNz SVdxeDBuQ0lydmNNRXdaOTBKeGtJTmFNQVRaWGZqdTlqZjgyWUFJUXhSQ20xNFd3NFBDaEFB RUFvUERsc0FGUlVnSGtSaVpBa1JFbW9TRVhpVmxSZ2ZRZ2VCYVhScG82TU9RbFpiRVJOMFF4 NGRyUlVjQUFKbW5yVkRCcmtWRHdOanI4QkRHeHE1WjJNUHlVUVp1UmdGWTZyUkFCZTVGZ1pq amRtOHVSVGgyZDViNE5rUVkwelg1UXBqVGMvbEQyTk94K1dTVzArKzJSSm1VR0pobVpWc1Fx Z3RDRTZscXBYR2pCY2htdDUwK2hRS0VBRWlodDVnVWNUSUVTUjlHaGxnRTlJSDBCaVRreHJN bVdJSERrb3NlOVN3Y1FsSERzT0lrOXlnaVZibDVKZ01MdVY0SFVteXBNa1RPa0VBQUNINUJB a0tBQUFBTEFBQUFBQWZBQjhBQUFiL1FJQndTQlFNQ0FVRHdGQWdEQVRFcUhSNFFDU3VWd0Qy aWpoTXB3ckNGcXNkSndpSzczREJNR2ZkQ2NaQ0RXakFFMlYzNDd2WTMvTm1kWE5FQ20xNFd3 NFBDaEFBRUFvUERsdGxER2xEWW1RSkVSSnFFaEdIV0FSVWdaVnFhV1plQUZaYkVSTjBReE9l V3dnQUFtYWJya01TWmtaakRyaFJrVnRIWXcrL1JBOWpTR09reGdwalNXT014a0lRWTByVDB3 YlIyTFFWM3Q0VUJjdmNGOS9lRnBkWXhkZ1o1aFVZQTczWUd4cnVDYlZqdDc4RzdoWEZxbGhZ L2ZMUXdSMEhJUWRHdVVyVHo1ZVFkSWMwY2ZJRXdCeUdEME1LdmNHU2FGR2pSOEd5ZUFQaElV b2ZRR05RU2dyQjRJc2RPQ3F4N0ZIREJpWWNPUXNoWWpLRHhsaVZEcFJqdW5DamRTVEpraVpQ NkFRQkFDSDVCQWtLQUFBQUxBQUFBQUFmQUI4QUFBYi9RSUJ3U0JRTUNBVUR3RkFnREFURXFI UjRRQ1N1VndEMmlqaE1wd3JDRnFzZEp3aUs3M0RCTUdmZENjWkNEV2pBRTJWMzQ3dlkzL05t ZFhORUNtMTRXdzRQQ2hBQUVBb1BEbHRsREdsRFltUUpFUkpxRWhHSFdBUlVnWlZxYVdaZUFG WmJFUk4wUXhPZVd3Z0FBbWFicmtNU1prWmpEcmhSa1Z0SFl3Ky9SQTlqU0dPa3hncGpTV09N eGtJUVkwclQwd2JSMkkzV0JjdmN6bHROeE56SVcwNjkzTUZZVDdiVHVtTlFxbGlzdjdCanN3 QUhvNjRlZ0ZkUUFiajBSdE9YRFFZNlZBQVVha2loTjFnU0xhSjFJWU9HQ2hnWFhxRVVwUTlB U1JsRFloVDB4UTRjQUNKRGhxREQ1bVJLakNBWXVBcmpCbVZLRFA5K1ZSbGpNeU1IRHdjZnVC bEJvb1NDQlF3Smlxa0pBZ0FoK1FRSkNnQUFBQ3dBQUFBQUh3QWZBQUFHLzBDQWNFZ1VEQWdG QThCUUlBd0V4S2gwZUVBa3JsY0E5b280VEtjS3doYXJIU2NJaXU5d3dUQm4zUW5HUWcxb3dC TmxkK083Mk4velpuVnpSQXB0ZUZzT0R3b1FBQkFLRHc1YlpReHBRMkprQ1JFU2FoSVJoMWdF VklHVmFtbG1YZ0JXV3hFVGRFTVRubHNJQUFKbW02NURFbVpHWXc2NFVaRmJSMk1QdjBRUFkw aGpwTVlLWTBsampNWkNFR05LMDlNRzBkaU4xZ1hMM001YlRjVGN5RnRPdmR6QldFKzIwN3Bq VUtwWXJMK3dZN01BQjRFZXJxWmpVQUc0bEtWQ0J3TWJ2blQ2ZENYVWtFSUZLMGpVa09FQ0ZF ZVFKRjJoRktVUEFJa2dRd0lhSStoTGlKQW9SMjdabzRZQkNKUWdWVzRjcE1ZREJwZ1ZaS0w1 OWNFQmh3K1UrUVJPUTRiQkFvVWxUWjdRQ1FJQUlma0VDUW9BQUFBc0FBQUFBQjhBSHdBQUJ2 OUFnSEJJRkF3SUJRUEFVQ0FNQk1Tb2RIaEFKSzVYQVBhS09FeW5Dc0lXcXgwbkNJcnZjTUV3 WjkwSnhrSU5hTUFUWlhmanU5amY4MloxYzBRS2JYaGJEZzhLRUFBUUNnOE9XMlVNYVVOaVpB a1JFbW9TRVlkWUJGU0JsV3BwWmw0QVZsc1JFM1JERTU1YkNBQUNacHV1UXhKbVJtTU91RkdS VzBkakQ3OUVEMk5JWTZUR0NtTkpZNHpHUWhCalN0UFRGQlhiMjFEWTFWc0dGdHpiRjlnQXps c0ZHT1FWR2VmSVcyTHRHaHZZd1ZnREQrMFYxNys2WTZCd2FOZkJ3eTlZWTJZQmNNQVBuU3RU WTFCOVlNZE5peVpPbmdDRkd1SUJ4RFpBaVJZMWVvVHZFNlVvREVJQUdyTlNVb05CVXV6QWFZ bGxqeG8yTStISWVYaUpwUnNSTk1hcStKU0ZDcHNSSkVxWU9QSDJKUWdBSWZrRUNRb0FBQUFz QUFBQUFCOEFId0FBQnY5QWdIQklGQXdJQlFQQVVDQU1CTVNvZEhoQUpLNVhBUGFLT0V5bkNz SVdxeDBuQ0lydmNNRXdaOTBKeGtJTmFNQVRaWGZqeXdqbHpYOWpkWE5FSGlBVkZYOE9Ed29R QUJBS0R3NWJaUXhwUWg4WWlJaGFFUkpxRWhGNFd3UkREcHViQUpkcWFXWmVBQnlvRlIwZWRF TVRvbHNJQUEreUZVcTJReEptQWdteUdodkJSSk5iQTVxb0djcEVEMk1FRnJJWDBrTUtZd1VV c2xEYWoyUEE0c29HWTQ3aUVPUUZZNnZTM0Z0Tll3L20xS1FEWXc3bXpGaFBaajVKR3pZR2lw VXRFU1lvd3pWbUY0QURnT0NCQ1pUZ0ZRQXhaQko0QWlYcVQ2bHRiVVpoV2RUb1VTUi9JaTFG V2JEbkRrVXlEUWhKc1FQbjVaVTlhdGpVaENQSFZoZ1ROeS9SU0tzaXFLRkZiVWFRS0dIaUpO eVhJQUFoK1FRSkNnQUFBQ3dBQUFBQUh3QWZBQUFHLzBDQWNFaDhKREFXQ3NCUUlBd0V4S2hV K0hGd0tsZ3NJTUhsSWc3VHFRZVRMVys3WFlJaVBHU0F5bVkwbXJGZ0EwTHd1THpiQ0MvNmVW bG5ld2tBRFhWRUNneGNBR1VhR1JkUUVBb1BEbWhuREd0REJKY1ZIUVliWVJJUmhXZ0VRd2Q3 QUI1MkFHdDdZQUFJY2hFVHJVSVRwR2dJQUFKN0VyZERFbnNDQTNJT3dVU1dhQU9jYUEvSlEw YW1CWEthMFFweUJRWnlFTkZDRUhJRzM5SGNhTjdmNFdoTTF1VFphRTF5ME4vVGFjWm95Ti9M WFUrLzBjTnlvTXhDVXl0WUxqbThBS1NTNDZyVkt6bXhBRGhqbENBQ01GR2tCaVU0TlVRUnhT NE9IaWp3TnFuU0pTNlpvdnpSeUpBUW8wTmhHcmdzNWJJUG13V0xDTEhzUXNmaHhCV1RlOVFr T3pDd0M4c3Y1SG8xMjdha3lSTTdRUUFBT3dBQUFBQUFBQUFBQUE9PSc7DQoJCX0NCg0KCQlv Yl9zdGFydCgpOw0KCQlvYl9lbmRfY2xlYW4oKTsNCgkJaGVhZGVyKCdDb250ZW50LXR5cGU6 IGltYWdlL2dpZicpOw0KCQllY2hvIGJhc2U2NF9kZWNvZGUoJGZpbGUpOw0KCQlleGl0KCk7 DQoJfQ0KDQoNCiAgICBmdW5jdGlvbiBzcGlfaW1ndG1jZV9nZW5lcmF0ZV90aHVtYm5haWwo KQ0KICAgIHsNCgkJZ2xvYmFsICRwcmVmcywgJHN0ZXA7DQoJCWV4dHJhY3Qoc3BpX2l1dG1j ZV9wcmVmcygpKTsNCgkJJGltYWdlX3BhdGggPSBodS4kcHJlZnNbJ2ltZ19kaXInXTsNCgkJ JGFydGljbGVfaWQgPSBncHMoJ0lEJyk7IC8vIEZldGNoIGFydGljbGUgaWQgZnJvbSAkX0dF VCwgaWYgYW55LCBvciBzZXRzIGl0IHRvICcnDQogICAgCSRmaWVsZHNfYXJyYXkgPSBleHBs b2RlKCIsIiwgJHNwaV9pdXRtY2VfZmllbGRzKTsgLy8gdHJhbmZvcm1zIGluIGFycmF5DQoJ CWZvciAoJGkgPTA7ICRpIDwgY291bnQoJGZpZWxkc19hcnJheSk7ICRpKyspIHsgLy8gY2hh bmdlcyBhcnJheSB2YWx1ZXMgdG8gYmUgdXNlZCB3aXRoIHVybHMgYW5kIGRiDQoJCQkkY3Vy cmVudF9maWVsZCA9IHRyaW0oJGZpZWxkc19hcnJheVskaV0pOyAgDQoJCQkkY3VycmVudF9m aWVsZCA9ICgkY3VycmVudF9maWVsZCA9PSAnI2FydGljbGUtaW1hZ2UnKSA/ICdJbWFnZSc6 IHN0cl9yZXBsYWNlKCcjY3VzdG9tLScsICdjdXN0b21fJywgJGN1cnJlbnRfZmllbGQpOw0K CQkJJGZpZWxkc19hcnJheVskaV0gPSAkY3VycmVudF9maWVsZDsgLy8gcmVpbnNlcnRzIG1v ZGlmaWVkIHZhbHVlDQoJCX0NCg0KICAgICAgICBpZiAoJHN0ZXAgPT0gJ2VkaXQnICYmICRh cnRpY2xlX2lkKSB7IC8vIHdoZW4gb3BlbmluZyBhbiBhbHJlYWR5IGV4aXN0YW50IGFydGlj bGUNCgkJCSRmaWVsZHNfc3RyaW5nID0gaW1wbG9kZSgnLCcsICRmaWVsZHNfYXJyYXkpOw0K ICAgICAgICAgICAgJHZhbHVlcyA9IHNhZmVfcm93KCRmaWVsZHNfc3RyaW5nLCAndGV4dHBh dHRlcm4nLCAnSUQgPSAnLiAkYXJ0aWNsZV9pZCk7DQogICAgCX0NCg0KICAgIAllbHNlaWYo JHN0ZXAgPT0gJ2NyZWF0ZScgfHwgJHN0ZXAgPT0gJ2VkaXQnKSB7IC8vIHdoZW4gaGl0dGlu ZyAnc2F2ZScNCgkJCWZvciAoJGkgPTA7ICRpIDwgY291bnQoJGZpZWxkc19hcnJheSk7ICRp KyspIHsgLy8gZmV0Y2ggYWxsIGltYWdlIGlkcyBhbmQgcHV0IGluIGFycmF5ICd2YWx1ZXMn DQoJCQkJJGN1cnJlbnQgPSAkZmllbGRzX2FycmF5WyRpXTsgIA0KCQkJCSR2YWx1ZXNbXSA9 IGdwcygkY3VycmVudF9maWVsZCk7DQoJCQl9DQogICAgCX0NCgkJDQoJCS8vIGNyZWF0ZXMg YSBudW1lcmljYWwgYXJyYXkgb2YgYWxsIGltYWdlcyBmb3IgY3VycmVudCBhcnRpY2xlDQoJ CSR2YWx1ZXMgPSBhcnJheV9maWx0ZXIoYXJyYXlfdmFsdWVzKCR2YWx1ZXMpKTsgLy8gY29u dmVydCB0byBudW1lcmljYWwgYXJyYXkgYW5kIHJlbW92ZSBlbXB0eSB2YWx1ZXMJCQ0KCQkk dmFsdWVzID0gZXhwbG9kZSgnLCcsIGltcGxvZGUoJywnLCAkdmFsdWVzKSk7IC8vIG9ubHkg b25lIHZhbHVlIHBlciBhcnJheSBrZXkNCgkJLy8gU2FuaXRpemVzIHZhbHVlcw0KICAgICAg CWZvcmVhY2goJHZhbHVlcyBhcyAkdmFsdWUpIHsNCgkJICAgIGlmKGlzX251bWVyaWMoJHZh bHVlKSkgew0KCQkJICAgICRpZHNbXSA9ICInIi5kb1NsYXNoKCR2YWx1ZSkuIiciOw0KICAg ICAgICAgICAgfQ0KCSAgICB9DQoNCiAgICAgICAgLy8gUHJvY2VlZCBvbmx5IGlmIGFuIGFy dGljbGUgaW1hZ2UgZXhpc3RzLg0KICAgICAgICBpZiAoaXNzZXQoJGlkcykpIHsNCg0KICAg ICAgICAgICAgJGlkcyA9IGltcGxvZGUoJywnLCRpZHMpOw0KICAgICAgICAgIAkkcnMgPSBz YWZlX3Jvd3MoDQoJCQkJJ2V4dCxpZCx0aHVtYm5haWwnLA0KCQkJCSd0eHBfaW1hZ2UnLA0K CQkJCSdpZCBpbiAoJy4kaWRzLicpJw0KCQkJKTsNCg0KCQkJaWYgKCRycykgeyAvLyBJZiBp bWFnZSBleGlzdA0KCQkJCSRybmRfbnVtYmVyID0gJz8nLnRpbWUoKTsgLy8gQXBwZW5kIHRv IHNyYyB0byBmb3JjZSByZWxvYWQuDQoJCQkJZm9yZWFjaCgkcnMgYXMgJGEpIHsNCgkJCQkJ ZXh0cmFjdCgkYSk7DQoJCQkJCWlmKCR0aHVtYm5haWwgPT0gMCl7DQoJCQkJCQkkaW1hZ2Ug PSAkaWQuJGV4dC4kcm5kX251bWJlcjsNCgkJCQkJfQ0KCQkJCQllbHNlIHsNCgkJCQkJCSRp bWFnZSA9ICRpZC4ndCcuJGV4dC4kcm5kX251bWJlcjsNCgkJCQkJfQ0KCQkJCQkkc3RyW10g PQ0KCQkJCQkJJzxsaSBjbGFzcz0ic3BpX2l1dG1jZV9pbWFnZV9jb250YWluZXIgaWQnLiRp ZC4nIj4nLg0KCQkJCQkJCSc8aW1nIHNyYz0iJy4kaW1hZ2VfcGF0aC4nLycuJGltYWdlLici IGFsdD0iIiAvPicuDQoJCQkJCQkJJzxzcGFuPicuDQoJCQkJCQkJCSc8YSBjbGFzcz0ic3Bp X2ltZ3RtY2VfZGVsZXRlIiBocmVmPSIjIiB0aXRsZT0iJy4kc3BpX2ltZ3RtY2VfZGVsZXRl X3RleHQuJyI+Jy4kc3BpX2ltZ3RtY2VfZGVsZXRlX3RleHQuJzwvYT4nLg0KCQkJCQkJCQkn IDxhIGNsYXNzPSJzcGlfaW1ndG1jZV9lZGl0IiBocmVmPSIjIiB0aXRsZT0iJy4kc3BpX2lt Z3RtY2VfZWRpdF90ZXh0LiciPicuJHNwaV9pbWd0bWNlX2VkaXRfdGV4dC4nPC9hPicuDQoJ CQkJCQkJJzwvc3Bhbj4nLg0KCQkJCQkJJzwvbGk+JzsNCgkJCQl9DQoJCQkJcmV0dXJuIGlt cGxvZGUoJycsJHN0cik7DQoJCQl9DQogICAgICAgIH0NCiAgICB9DQoNCg0KLyoqDQoJR2Vu ZXJhdGVzIGpzIGNvZGUNCiovDQoNCiAgICBmdW5jdGlvbiBzcGlfaW1ndG1jZV91cGxvYWQo KQ0KICAgIHsNCgkJZ2xvYmFsICRldmVudDsNCg0KCQlpZigkZXZlbnQgIT0gJ2FydGljbGUn KSB7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlleHRyYWN0KHNwaV9pdXRtY2VfcHJlZnMoKSk7 CQkNCgkJJHNwaV9pdXRtY2Vfc2F2ZWRfaW1hZ2UgPSBzcGlfaW1ndG1jZV9nZW5lcmF0ZV90 aHVtYm5haWwoKTsNCg0KCQllY2hvIDw8PEpTX0NPREUNCgkJPCEtLSA8c2NyaXB0IHR5cGU9 InRleHQvamF2YXNjcmlwdCIgc3JjPSIkc3BpX2l1dG1jZV91aV9wYXRoIj48L3NjcmlwdD4g LS0+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJCQkNCgkJCSQoZG9j dW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KCQkJCS8vIE1vZGlmeSAnd3JpdGUnIHRhYg0K CQkJCSQoIiRzcGlfaXV0bWNlX2ZpZWxkcyIpLnBhcmVudHMoInAiKS5hcHBlbmQoJzx1bCBj bGFzcz0ic3BpX2l1dG1jZV91bF9jb250YWluZXIiPjwvdWw+PGEgY2xhc3M9InNwaV9hZGRf aW1hZ2UiIGhyZWY9IiMiIHRpdGxlPSIkc3BpX2Nob29zZV9pbWFnZV90ZXh0Ij4kc3BpX2No b29zZV9pbWFnZV90ZXh0PC9hPicpOyAvLyBDcmVhdGVzIGFuICdhZGQgaW1hZ2UnIGxpbmsu DQoJCQkJJCgiYm9keSIpLmFwcGVuZCgnPGRpdiBpZD0ic3BpX3RlbXBvcmFyeSI+JHNwaV9p dXRtY2Vfc2F2ZWRfaW1hZ2U8L2Rpdj4nKTsNCgkJCQkkKCIuc3BpX2FkZF9pbWFnZSIpLmVh Y2goZnVuY3Rpb24oKXsgLy8gZGlzcGxheSBzYXZlZCBpbWFnZXMNCgkgICAgIAkJCXZhciB2 YWx1ZSA9ICQodGhpcykucGFyZW50cygicCIpLmZpbmQoImlucHV0IikudmFsKCk7DQoJCSAg ICAgICAgICAgIHZhciBjb250YWluZXIgPSAkKHRoaXMpLnByZXYoJy5zcGlfaXV0bWNlX3Vs X2NvbnRhaW5lcicpOw0KCQkJCQlpZih2YWx1ZSkgew0KCQkJCQkJdmFyIGlkcyA9IHZhbHVl LnNwbGl0KCIsIik7DQoJCQkJCQlmb3IodmFyIGkgPSAwIDsgaSA8IGlkcy5sZW5ndGggOyBp KyspIHsNCgkJICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VJZCA9IGlkc1tpXTsNCgkJ CQkJCQlpZiAoaWRzW2ldKSB7DQoJCQkgICAgICAgICAgICAgICAgICAgIHZhciBpZENsYXNz ID0gIi5pZCIgKyBpZHNbaV07DQoJCQkJCQkJCSQoIiNzcGlfdGVtcG9yYXJ5ICIraWRDbGFz cykuY2xvbmUoKS5hcHBlbmRUbyhjb250YWluZXIpOyAvLyBjbG9uZSBjb3Mgb3RoZXJ3aXNl IGR1cGxpY2F0ZSBpbWFnZXMgYXJlIGFwcGVuZGVkIG9ubHkgb25jZQ0KCSAgICAgICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgCQkJCQl9DQoJCQkJCX0NCgkJCQl9KTsNCgkJCQkkKCIj c3BpX3RlbXBvcmFyeSIpLnJlbW92ZSgpOw0KCQkJCSQoIiRzcGlfaXV0bWNlX2ZpZWxkcyIp LmhpZGUoKTsgLy8gSGlkZSBhcnRpY2xlIGltYWdlIGlucHV0Lg0KDQoJCQkJaWYgKGpRdWVy eS51aSkgewkJCQkNCgkJCSAgICAJJCgiLnNwaV9pdXRtY2VfdWxfY29udGFpbmVyIikuc29y dGFibGUoew0KCQkJCQkJdXBkYXRlOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCgkJCQkJCQl2 YXIgaW1nT3JkZXIgPSAkKHRoaXMpLnNvcnRhYmxlKCd0b0FycmF5Jyx7YXR0cmlidXRlOiJj bGFzcyJ9KS50b1N0cmluZygpLnJlcGxhY2UoL3NwaV9pdXRtY2VfaW1hZ2VfY29udGFpbmVy IGlkL2csIiIpOw0KCQkJCQkJCSQodGhpcykuc2libGluZ3MoImlucHV0IikudmFsKGltZ09y ZGVyKTsNCgkJCQkJCX0NCgkJCQkJfSk7DQoJCQkgICAgfQ0KDQoJCQkJLy8gV2hlbiBjbGlj a2luZyAnYWRkJyBvciAnZWRpdCcgbGluay4uLg0KCQkJCSQoIi5zcGlfYWRkX2ltYWdlLCAu c3BpX2ltZ3RtY2VfZWRpdCIpLmxpdmUoImNsaWNrIixmdW5jdGlvbigpew0KCQkJCQ0KCQkJ CQkvLyBTZXQgdmFyaWFibGVzDQoJCQkJCXZhciBzZWxlY3RvciA9ICQodGhpcyk7IC8vIENs aWNrZWQgbGluaw0KCQkJCQl2YXIgaW5wdXQgPSBzZWxlY3Rvci5wYXJlbnRzKCJwIikuZmlu ZCgiaW5wdXQiKTsgLy8gLi4uY29ycmVzcG9uZGluZyBpbnB1dA0KCQkJCQl2YXIgcCA9IHNl bGVjdG9yLnBhcmVudHMoInAiKTsgLy8gLi4uc3Vycm91bmRpbmcgcA0KCQkJCQl2YXIgdmFs dWVzID0gaW5wdXQudmFsKCkuc3BsaXQoIiwiKTsgLy8gZXhpc3RhbnQgaWRzIGFycmF5DQoJ CSAgICAgICAgICAgIHZhciBiYWNrdXAgPSBwLmNsb25lKCk7IC8vIGJhY2t1cCBmb3IgdW5k bw0KCQkgICAgICAgICAgICANCgkJCQkJLy8gRGV0ZXJtaW5lcyBpZiBjbGlja2VkIGl0ZW0g aXMgc2luZ2xlLWltYWdlIG9yIG11bHRpDQoJCQkJCXZhciBjbGlja2VkSWQgPSBpbnB1dC5h dHRyKCdpZCcpOw0KCQkJCQl2YXIgbW9ub0xpc3QgPSAnJHNwaV9pdXRtY2VfbW9ub19saXN0 JzsNCgkJICAgICAgICAgICAgaWYgKG1vbm9MaXN0LmluZGV4T2YoY2xpY2tlZElkKSE9IC0x KSB7IC8vIGlmIGNsaWNrZWQgaW5wdXQgaWQgaXMgaW4gJHNwaV9pdXRtY2VfbW9ub19saXN0 IHN0cmluZw0KCQkgICAgICAgICAgICAJdmFyIHR5cGUgPSAnbW9ubyc7DQoJCQkJCX0NCg0K CQkJCQkvLyBTZXQgdGhlIHVybCB0aGUgaWZyYW1lIG11c3QgcG9pbnQgdG8uDQoJCQkJCWlm IChzZWxlY3Rvci5hdHRyKCJjbGFzcyIpID09ICdzcGlfYWRkX2ltYWdlJykgeyAvLyBJZiAu c3BpX2FkZF9pbWFnZSBpcyBjbGlja2VkLi4uDQoJCQkJCQl2YXIgaWZyYW1lVXJsID0gImlu ZGV4LnBocD9ldmVudD1pbWFnZSI7DQoJCQkJCX0NCgkJCQkJZWxzZSB7DQoJCQkJCQkvLyBJ ZiBhbiBlZGl0IGxpbmsgaXMgY2xpY2tlZC4uLg0KCQkJCQkJdmFyIGltYWdlSWQgPSAkKHRo aXMpLnBhcmVudHMoIi5zcGlfaXV0bWNlX2ltYWdlX2NvbnRhaW5lciIpLmF0dHIoImNsYXNz IikucmVwbGFjZSgic3BpX2l1dG1jZV9pbWFnZV9jb250YWluZXIgaWQiLCIiKTsNCgkJCQkJ CXZhciBpZnJhbWVVcmwgPSAiaW5kZXgucGhwP2V2ZW50PWltYWdlJnN0ZXA9aW1hZ2VfZWRp dCZpZD0iK2ltYWdlSWQ7DQoJCQkJCX0NCg0KCQkJCQkvLyBGYWRlIGluIEJhY2tncm91bmQN CgkJCQkgICAgJCgnYm9keScpLmFwcGVuZCgnPGRpdiBpZD0ic3BpX2l1dG1jZV9mYWRlIj48 L2Rpdj4nKTsgLy9BZGQgdGhlIGZhZGUgbGF5ZXIgdG8gc3BpdG9tIG9mIHRoZSBib2R5IHRh Zy4NCgkJCQkgICAgJCgnI3NwaV9pdXRtY2VfZmFkZScpLnNob3coKS5jc3MoeydmaWx0ZXIn IDogJ2FscGhhKG9wYWNpdHk9ODApJ30pOyAvLyBzaG93IHRoZSBmYWRlIGxheWVyIC0gIGZp eCB0aGUgSUUgQnVnIG9uIGZhZGluZyB0cmFuc3BhcmVuY2llcw0KDQoJCQkJCS8vIENyZWF0 ZXMgYW4gaGlkZGVuIGlmcmFtZS4NCgkJCQkJJCgiYm9keSIpLmFwcGVuZCgNCgkJCQkJCSc8 ZGl2IGlkPSJzcGlfaXV0bWNlX2lmcmFtZV9jb250YWluZXIiPicgKw0KCQkJCQkJCSc8aWZy YW1lIGlkPSJzcGlfaXV0bWNlX2lmcmFtZSIgc3JjID0iJyArIGlmcmFtZVVybCArICciIGZy YW1lYm9yZGVyPSIwIj48L2lmcmFtZT4nICsNCgkJCQkJCSc8L2Rpdj4nDQoJCQkJCSk7DQoN CgkgICAgICAgICAgIAkJLy8gY3JlYXRlcyAnY2FuY2VsJyBhbmQgJ3NhdmUnIGJ1dHRvbnMN CgkJICAgICAgICAgICAgJCgiI3NwaV9pdXRtY2VfaWZyYW1lIikuYWZ0ZXIoIjxwPjxhIGlk PVwic3BpX2l1dG1jZV9zYXZlXCI+JHNwaV9pdXRtY2Vfc2F2ZV90ZXh0PC9hPjxhIGlkPVwi c3BpX2l1dG1jZV9jYW5jZWxcIj4kc3BpX2l1dG1jZV9jYW5jZWxfdGV4dDwvYT48L3A+Iik7 DQoJCSAgICAgICAgICAgIA0KCQkJCQkvLyBDYWxjdWxhdGVzIGhlaWdodHMgYmFzZWQgb24g d2luZG93IHNpemUgZm9yIHZlcnRpY2FsIGNlbnRlcmluZy4NCgkJCQkJdmFyIHdpbmRvd0hl aWdodCA9ICQod2luZG93KS5oZWlnaHQoKTsNCgkJCQkJdmFyIGNvbnRhaW5lckhlaWdodCA9 ICh3aW5kb3dIZWlnaHQgKiA4MCkgLyAxMDA7DQoJCQkJCXZhciBjb250YWluZXJUb3BNYXJn aW4gPSAod2luZG93SGVpZ2h0IC0gY29udGFpbmVySGVpZ2h0KSAvIDI7DQoJCQkJCXZhciBp ZnJhbWVIZWlnaHQgPSAoY29udGFpbmVySGVpZ2h0ICogNzgpIC8gMTAwOw0KCQkJCQl2YXIg bG9hZGluZ1RvcE1hcmdpbiA9ICh3aW5kb3dIZWlnaHQgLyAyKSAtIDMwOw0KCQkJCQkkKCIj c3BpX2l1dG1jZV9pZnJhbWVfY29udGFpbmVyIikuaGVpZ2h0KGNvbnRhaW5lckhlaWdodCku Y3NzKCJ0b3AiLCBjb250YWluZXJUb3BNYXJnaW4pOw0KCQkJCQkkKCIjc3BpX2l1dG1jZV9p ZnJhbWUiKS5oZWlnaHQoaWZyYW1lSGVpZ2h0KS5jc3MoIm1hcmdpbi10b3AiLCBjb250YWlu ZXJUb3BNYXJnaW4gLyAyKTsNCgkJCQkJJCgiI3NwaV9pdXRtY2Vfc2F2ZSIpLmNzcygibWFy Z2luLXRvcCIsIGNvbnRhaW5lclRvcE1hcmdpbiAvIDIpOw0KCQkJCQkkKCJib2R5IikuYXBw ZW5kKCc8cCBpZD0ic3BpX2l1dG1jZV9sb2FkaW5nIj5sb2FkaW5nPC9wPicpOw0KDQoNCgkJ CQkJLy8gSWZyYW1lIGludGVyYWN0aW9ucw0KCQkJCQkkKCIjc3BpX2l1dG1jZV9pZnJhbWUi KS5sb2FkKGZ1bmN0aW9uKCl7DQoNCgkJCQkJCS8vIEhpZGVzIGluIGlmcmFtZQ0KCQkJCQkJ dmFyIGlmcmFtZSA9ICQoIiNzcGlfaXV0bWNlX2lmcmFtZSIpLmNvbnRlbnRzKCk7DQoJCQkJ CQlpZnJhbWUuZmluZCgiLnR4cC1oZWFkZXIsIC50eHAtZm9vdGVyLCAjcGFnZXRvcCwgI2Vu ZF9wYWdlLCAjbmF2LCAjbWVzc2FnZXBhbmUsICN0eHAtaGVhZCIpLmhpZGUoKTsgLy8gc29t ZSBhcmUga2VwdCBldmVuIGlmIG5vdyBubyBtb3JlIHVzZWQNCgkJCQkJCWlmcmFtZS5maW5k KCIjaW1hZ2Utc2VhcmNoIG9wdGlvblt2YWx1ZT1hdXRob3JdIikucmVtb3ZlKCk7IC8vIHJl bW92ZSBzb21lIG9wdGlvbnMgZnJvbSBzZWFyY2gNCgkJCQkJCWlmcmFtZS5maW5kKCIjaW1h Z2Utc2VhcmNoIG9wdGlvblt2YWx1ZT1pZF0iKS5yZW1vdmUoKTsNCgkJCQkJCWlmcmFtZS5m aW5kKCIjaW1hZ2Utc2VhcmNoIG9wdGlvblt2YWx1ZT1hbHRdIikucmVtb3ZlKCk7DQoJCQkJ CQlpZnJhbWUuZmluZCgiI2ltYWdlLXNlYXJjaCBvcHRpb25bdmFsdWU9Y2FwdGlvbl0iKS5y ZW1vdmUoKTsNCgkJCQkJCWlmcmFtZS5maW5kKCIudHhwLWxpc3QgLmlkIGEiKS5jb250ZW50 cygpLnVud3JhcCgpOyAvLyB1bmxpbmtzIHRoZSBpZCAjDQoJCQkJCQlpZnJhbWUuZmluZCgi LnR4cC1saXN0IC5kYXRlIikuaGlkZSgpOw0KCQkJCQkJaWZyYW1lLmZpbmQoIi50eHAtbGlz dCAudGFnLWJ1aWxkIikuaGlkZSgpOw0KCQkJCQkJaWZyYW1lLmZpbmQoIi50eHAtbGlzdCAu YXV0aG9yIikuaGlkZSgpOw0KCQkJCQkJaWZyYW1lLmZpbmQoIi5tdWx0aS1lZGl0IikuaGlk ZSgpOw0KCQkJCQkJaWZyYW1lLmZpbmQoIi50aHVtYm5haWwtZWRpdCIpLmhpZGUoKTsgLy8g SGlkZXMgJ3VwbG9hZCB0aHVtYicuDQoJCQkJCQlpZnJhbWUuZmluZCgiLnRodW1ibmFpbC1h bHRlciIpLmhpZGUoKTsgLy8gSGlkZXMgJ2NyZWF0ZSB0aHVtYicuICAoQ29tbWVudCB0aGlz IG91dCBpZiB5b3UgaGF2ZSBpbWFnZXMgd2l0aG91dCB0aHVtYnMgc28gdGhleSBhcmUgZWFz aWx5IGFjY2Vzc2libGUpDQoJCQkJCQlpZnJhbWUuZmluZCgiI2ltYWdlLW5hbWUiKS5wYXJl bnQoKS5oaWRlKCk7IC8vIEhpZGVzICdpbWFnZSBuYW1lJw0KCQkJCQkJaWZyYW1lLmZpbmQo ImlucHV0LnB1Ymxpc2giKS5oaWRlKCk7IC8vIEhpZGVzIG9yaWdpbmFsIHNhdmUgYnV0dG9u DQoJCQkJCQlpZnJhbWUuZmluZCgiI2pieF9kaXYiKS5yZW1vdmUoKTsgLy8gUmVtb3ZlcyBq YmRfbXVsdGlwbGVfdXBsb2FkDQoJCQkJCQlpZnJhbWUuZmluZCgiLnR4cC1saXN0IC5pZCAu aW1hZ2VzX2RldGFpbCIpLnJlbW92ZSgpOyAgDQoNCgkJCQkJCS8vIEFkZHMgJ2FkZCcgY29s dW1uDQoJCQkJCQlpZnJhbWUuZmluZCgnLnR4cC1saXN0IHRoZWFkIHRyJykuYXBwZW5kKCc8 dGg+JHNwaV9hZGRfaW1hZ2VfdGV4dDwvdGg+Jyk7DQoJCQkJCQlpZnJhbWUuZmluZCgnLnR4 cC1saXN0IHRib2R5IHRyJykuYXBwZW5kKA0KCQkJCQkJCSc8dGQgY2xhc3M9ImFkZCI+JysN CgkJCQkJCQkJJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic3BpX2ltZ3RtY2VfY2hl Y2tib3hbXSIgY2xhc3M9InNwaV9pbWd0bWNlX2NoZWNrYm94IiAvPicrDQoJCQkJCQkJJzwv dGQ+Jyk7DQoNCgkJCQkJCS8vIENoZWNrcyBjaGVja2JveGVzIGRlcGVuZGluZyBvbiBhbHJl YWR5IHNldCBjZnMuDQoJCQkJCQlpZiAodHlwZSA9PSAnbW9ubycpIHsgLy8gaWYgbW9ubyBy ZWR1Y2UgdmFsdWVzIGFycmF5IHRvIGxhc3QgaXRlbQ0KCQkJCQkJCXZhciBpbWFnZUlkID0g dmFsdWVzLnBvcCgpOw0KCQkJICAgICAgICAgICAgCXZhbHVlcz1bXTsNCgkJCQkJCQl2YWx1 ZXMucHVzaChpbWFnZUlkKTsNCgkJCQkJICAgIH0NCgkgICAgICAgICAgICAgICAgICAgIGZv cih2YXIgaSA9IDAgOyBpIDwgdmFsdWVzLmxlbmd0aCA7IGkrKykgeyANCgkgICAgICAgICAg ICAgICAgICAgICAgICBpbWFnZUlkID0gdmFsdWVzW2ldOw0KCSAgICAgICAgICAgICAgICAg ICAgICAgIGlmcmFtZS5maW5kKCIudHhwLWxpc3QgLm11bHRpLWVkaXQgaW5wdXQiKS5maWx0 ZXIoZnVuY3Rpb24oKXsNCgkJCQkJCQkJcmV0dXJuICQodGhpcykudmFsKCkgPT0gaW1hZ2VJ ZA0KCQkJCQkJCTt9KS5wYXJlbnRzKCJ0ciIpLmZpbmQoJ2lucHV0LnNwaV9pbWd0bWNlX2No ZWNrYm94JykuYXR0cignY2hlY2tlZCcsIHRydWUpLnBhcmVudHMoInRyIikuY3NzKCJiYWNr Z3JvdW5kIiwiJHNwaV9pdXRtY2Vfcm93X2JnIik7DQoJCQkJCQl9DQoNCiAgICAgIAkJCQkJ Ly8gZXZlcnl0aGluZyBpcyBkb25lLCBub3cgbG9hZGVyIGNhbiBiZSBoaWRkZW4gYW5kIGlm cmFtZSBjYW4gYmUgc2hvd24uDQoJCQkJCQkkKCIjc3BpX2l1dG1jZV9sb2FkaW5nIikuaGlk ZSgpOw0KCQkJCQkJJCgiI3NwaV9pdXRtY2VfaWZyYW1lX2NvbnRhaW5lciIpLnNob3coKTsN Cg0KCQkJCQkJLy8gb24gY2xpY2sNCgkJCQkJCWlmcmFtZS5maW5kKCIuc3BpX2ltZ3RtY2Vf Y2hlY2tib3hbdHlwZT1jaGVja2JveF0iKS5jbGljayhmdW5jdGlvbigpew0KCQkJCQkJCXZh ciBpbWFnZUlkID0gJCh0aGlzKS5wYXJlbnRzKCJ0ciIpLmZpbmQoIi5tdWx0aS1lZGl0IGlu cHV0IikudmFsKCk7IC8vIEdyYWJzIGltYWdlIGlkLg0KCQkJCQkJCXZhciBpbWFnZVVybCA9 ICQodGhpcykucGFyZW50cygidHIiKS5maW5kKCJ0ZC50aHVtYm5haWwgaW1nIikuYXR0cign c3JjJyk7IC8vIEdyYWJzIHVybCBvZiBjdXJyZW50bHkgY2hlY2tlZCB0aHVtYg0KDQoJCQkJ CQkJaWYgKHRoaXMuY2hlY2tlZCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICh0eXBlID09ICdtb25vJykgew0KCQkJCQkJCQkJaWZyYW1lLmZpbmQoInRyIikuY3Nz KCJiYWNrZ3JvdW5kIiwibm9uZSIpOyAvLyBFbGltaW5hdGVzIGFsbCByb3dzIGJnLg0KCQkJ CQkJCQkJaWZyYW1lLmZpbmQoIi5zcGlfaW1ndG1jZV9jaGVja2JveCIpLm5vdCgkKHRoaXMp KS5hdHRyKCdjaGVja2VkJywgZmFsc2UpOyAvLyBVbmNoZWNrcyBhbGwgb3RoZXIgY2hlY2ti b3hlcy4NCgkJCQkJCQkJCXAuZmluZCgiLnNwaV9pdXRtY2VfaW1hZ2VfY29udGFpbmVyIiku cmVtb3ZlKCk7IC8vIFJlbW92ZXMgaW1hZ2UgY29udGFpbmVyDQoJCQkJCQkJICAgIH0NCgkJ CQkJCQkgICAgJCh0aGlzKS5wYXJlbnRzKCJ0ciIpLmNzcygiYmFja2dyb3VuZCIsIiRzcGlf aXV0bWNlX3Jvd19iZyIpOyAvLyBDaGFuZ2VzIGNoZWNrZWQgcm93IGJnLg0KCQkJCQkJCQl2 YWx1ZXMucHVzaChpbWFnZUlkKTsgLy8gSW5zZXJ0cyBuZXcgaW1hZ2UgaWQuDQoJCQkJCQkJ CXAuZmluZCgiLnNwaV9pdXRtY2VfdWxfY29udGFpbmVyIikuYXBwZW5kKA0KCQkJCQkJCQkJ JzxsaSBjbGFzcz0ic3BpX2l1dG1jZV9pbWFnZV9jb250YWluZXIgaWQnICsgaW1hZ2VJZCAr ICciPicgKw0KCQkJCQkJCQkJCSc8aW1nIHNyYz0iJyArIGltYWdlVXJsICsgJyIgLz4nICsN CgkJCQkJCQkJCQknPHNwYW4+JyArDQoJCQkJCQkJCQkJCSc8YSBjbGFzcz0ic3BpX2ltZ3Rt Y2VfZGVsZXRlIiBocmVmPSIjIiB0aXRsZT0iJHNwaV9pbWd0bWNlX2RlbGV0ZV90ZXh0Ij4k c3BpX2ltZ3RtY2VfZGVsZXRlX3RleHQ8L2E+JyArDQoJCQkJCQkJCQkJCScgPGEgY2xhc3M9 InNwaV9pbWd0bWNlX2VkaXQiIGhyZWY9IiMiIHRpdGxlPSIkc3BpX2ltZ3RtY2VfZWRpdF90 ZXh0Ij4kc3BpX2ltZ3RtY2VfZWRpdF90ZXh0PC9hPicgKw0KCQkJCQkJCQkJCSc8L3NwYW4+ JyArDQoJCQkJCQkJCQknPC9saT4nDQoJCQkJCQkJCSk7DQoJCQkJCQkJfQ0KDQoJCQkJCQkJ ZWxzZSB7DQoJCQkJCQkJCXZhciBhcnJheUluZGV4ID0gJC5pbkFycmF5KGltYWdlSWQsIHZh bHVlcyk7IC8vIGNoZWNrcyB0aGlzIGlkIGluZGV4IGluIGFycmF5DQoJCSAgICAgICAgICAg ICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UoYXJyYXlJbmRleCwxKTsgLy8gZWxpbWluYXRl cyB0aGlzIGlkIGZyb20gYXJyYXkNCgkJCQkJCQkJcC5maW5kKCIuc3BpX2l1dG1jZV9pbWFn ZV9jb250YWluZXIuaWQiK2ltYWdlSWQpLnJlbW92ZSgpOyAvLyBSZW1vdmVzIHRodW1ibmFp bCBjb250YWluZXIuDQoJCQkJCQkJCSQodGhpcykucGFyZW50cygidHIiKS5jc3MoImJhY2tn cm91bmQiLCJub25lIik7IC8vIFJlbW92ZXMgYmFja2dyb3VuZC4NCgkJCQkJCQl9DQoJCQkJ CQl9KTsNCg0KCQkJCQkJLy8gU2V0cyBhZ2FpbiBiYWNrZ3JvdW5kIGZvciBzZWxlY3RlZCBy b3cuDQoJCQkJCQlpZnJhbWUuZmluZCgiLnR4cC1saXN0IHRyOmhhcyhpbnB1dC5zcGlfaW1n dG1jZV9jaGVja2JveDpjaGVja2VkKSIpLmFkZENsYXNzKCJzcGlfaXV0bWNlX3Jvd19iYWNr Z3JvdW5kIik7DQoNCgkJCQkJCS8vIEF2b2lkIEZPVUMgd2hlbiBjbGlja2luZyBsaW5rcyBh bmQgc3VibWl0cy4NCgkJCQkJCWlmcmFtZS5maW5kKCIudHhwLWxpc3QgYSwgaW5wdXQuc21h bGxlcmJveCwgaW5wdXQucHVibGlzaCIpLm5vdCgiI2VibGNyb3B1aSBhLCAjZWJsY3JvcHVp IGlucHV0IikuY2xpY2soZnVuY3Rpb24oKXsNCgkJCQkJCQkgJCgiI3NwaV9pdXRtY2VfaWZy YW1lX2NvbnRhaW5lciIpLmhpZGUoKTsNCgkJCQkJCQkgJCgiI3NwaV9pdXRtY2VfbG9hZGlu ZyIpLnNob3coKTsNCgkJCQkJCX0pOw0KDQoJCQkJCQkvLyBXaGVuIGNsaWNraW5nICdzYXZl JyBidXR0b24uLi4NCgkJCQkJCSQoIiNzcGlfaXV0bWNlX3NhdmUiKS5jbGljayhmdW5jdGlv bigpew0KDQoJCQkJCQkJdmFyIGlmcmFtZSA9ICQoIiNzcGlfaXV0bWNlX2lmcmFtZSIpLmNv bnRlbnRzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlmcmFtZS5maW5k KCIucHVibGlzaCIpLmxlbmd0aCkgeyAvLyB3ZSBhcmUgb24gZWRpdCBwYW5lDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgCWlmcmFtZS5maW5kKCIucHVibGlzaCIpLmNsaWNrKCk7 DQoJCQkJCQkJCXZhciBlZGl0ZWRJbWFnZUlkID0gaWZyYW1lLmZpbmQoIi5wdWJsaXNoIiku cGFyZW50KCkubmV4dCgiaW5wdXRbbmFtZT1pZF0iKS52YWwoKTsNCgkJCQkJCQkJdmFyIGlt YWdlVXJsID0gaWZyYW1lLmZpbmQoIi4udGh1bWJuYWlsLWVkaXQgaW1nIikuYXR0cignc3Jj Jyk7IC8vIEdyYWJzIHRoZSBuZXcgaW1hZ2UgdGh1bWJuYWlsLg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnbW9ubycpIHsNCgkJCQkJICAgICAgICAg ICAgCXZhbHVlcy5sZW5ndGggPSAwOw0KCQkJCQkgICAgICAgICAgICAJcC5maW5kKCIuc3Bp X2l1dG1jZV91bF9jb250YWluZXIgbGkiKS5yZW1vdmUoKTsNCgkJCQkJCQkgICAgfQkJCQkJ CQkJDQoJCQkJCQkJCWlmICgkLmluQXJyYXkoZWRpdGVkSW1hZ2VJZCwgdmFsdWVzKSE9LTEp IHsgLy8gV2hlbiBlZGl0aW5nIGFuIGFscmVhZHkgc2VsZWN0ZWQgaW1hZ2UganVzdCByZWZy ZXNoIGltYWdlLg0KCQkJCQkJCQkJJCgiLmlkIitlZGl0ZWRJbWFnZUlkKyIgaW1nIikuYXR0 cignc3JjJywgaW1hZ2VVcmwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2Ugew0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAkJdmFsdWVzLnB1c2goZWRpdGVkSW1hZ2VJZCk7DQoJ CQkJCQkJCQlwLmZpbmQoIi5zcGlfaXV0bWNlX3VsX2NvbnRhaW5lciIpLmFwcGVuZCgNCgkJ CQkJCQkJCQknPGxpIGNsYXNzPSJzcGlfaXV0bWNlX2ltYWdlX2NvbnRhaW5lciBpZCcgKyBl ZGl0ZWRJbWFnZUlkICsgJyI+JyArDQoJCQkJCQkJCQkJCSc8aW1nIHNyYz0iJyArIGltYWdl VXJsICsgJyIgLz4nICsNCgkJCQkJCQkJCQkJJzxzcGFuPicgKw0KCQkJCQkJCQkJCQkJJzxh IGNsYXNzPSJzcGlfaW1ndG1jZV9kZWxldGUiIGhyZWY9IiMiIHRpdGxlPSIkc3BpX2ltZ3Rt Y2VfZGVsZXRlX3RleHQiPiRzcGlfaW1ndG1jZV9kZWxldGVfdGV4dDwvYT4nICsNCgkJCQkJ CQkJCQkJCScgPGEgY2xhc3M9InNwaV9pbWd0bWNlX2VkaXQiIGhyZWY9IiMiIHRpdGxlPSIk c3BpX2ltZ3RtY2VfZWRpdF90ZXh0Ij4kc3BpX2ltZ3RtY2VfZWRpdF90ZXh0PC9hPicgKw0K CQkJCQkJCQkJCQknPC9zcGFuPicgKw0KCQkJCQkJCQkJCSc8L2xpPicNCgkJCQkJCQkJCSk7 DQogICAgICAgIAkJCQkJCX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIHdlIGFyZSBvbiBpbWcgbGlzdA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWVzID0gaW5wdXQu dmFsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2xkVmFsdWVz WzBdICYmIHR5cGUgIT0gJ21vbm8nKSB7IC8vIGVsaW1pbmF0ZXMgZmlyc3QgKGJsYW5rKSBh cnJheSBpdGVtIGlmIG9sZFZhbHVlIGlzIGVtcHR5DQoJCQkJCQkJCQl2YWx1ZXMuc2hpZnQo KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICdtb25vJykgew0KCQkJCQkJCQkJdmFyIGlt YWdlSWQgPSB2YWx1ZXMucG9wKCk7DQoJCQkJCSAgICAgICAgICAgIAl2YWx1ZXM9W107DQoJ CQkJCQkJCQl2YWx1ZXMucHVzaChpbWFnZUlkKTsNCgkJCQkJCQkgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgDQoJCQkJCQkJCWlucHV0LnZhbCh2YWx1ZXMpOyAvLyB1cGRh dGUgY2YgdmFsdWVzDQogICAgCQkJCQkJCSQoIiNzcGlfaXV0bWNlX2lmcmFtZV9jb250YWlu ZXIsICNzcGlfaXV0bWNlX2xvYWRpbmcsICNzcGlfaXV0bWNlX2ZhZGUiKS5yZW1vdmUoKTsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoJCQkJCQl9KQ0KCQkJCQkJDQoJCQkJ CQkvLyBXaGVuIGNsaWNraW5nICdjYW5jZWwnIGJ1dHRvbi4uLg0KCQkJCQkJJCgiI3NwaV9p dXRtY2VfY2FuY2VsIikuY2xpY2soZnVuY3Rpb24oKXsNCgkJCQkJCQlwLnJlcGxhY2VXaXRo KGJhY2t1cCk7DQoJCQkJCQkJaWYgKGpRdWVyeS51aSkgew0KCQkJCQkJICAgIAkkKCIuc3Bp X2l1dG1jZV91bF9jb250YWluZXIiKS5zb3J0YWJsZSh7DQoJCQkJCQkJCQl1cGRhdGU6IGZ1 bmN0aW9uKGV2ZW50LCB1aSkgew0KCQkJCQkJCQkJCXZhciBpbWdPcmRlciA9ICQodGhpcyku c29ydGFibGUoJ3RvQXJyYXknLHthdHRyaWJ1dGU6ImNsYXNzIn0pLnRvU3RyaW5nKCkucmVw bGFjZSgvc3BpX2l1dG1jZV9pbWFnZV9jb250YWluZXIgaWQvZywiIik7DQoJCQkJCQkJCQkJ JCh0aGlzKS5zaWJsaW5ncygiaW5wdXQiKS52YWwoaW1nT3JkZXIpOw0KCQkJCQkJCQkJfQ0K CQkJCQkJCQl9KTsNCgkJCQkJCSAgICB9DQoJCQkgICAgICAgICAgICAgICAgJCgiI3NwaV9p dXRtY2VfaWZyYW1lX2NvbnRhaW5lciwgI3NwaV9pdXRtY2VfbG9hZGluZywgI3NwaV9pdXRt Y2VfZmFkZSIpLnJlbW92ZSgpOw0KCQkJCQkJfSkNCg0KCQkJCQl9KTsNCgkJCQkJcmV0dXJu IGZhbHNlOw0KCQkJCX0pOw0KDQoJCQkgICAkKCIuc3BpX2ltZ3RtY2VfZGVsZXRlIikubGl2 ZSgnY2xpY2snLGZ1bmN0aW9uKCl7DQoJCQkJCXZhciBpbnB1dCA9ICQodGhpcykucGFyZW50 cygicCIpLmZpbmQoImlucHV0Iik7DQoJCQkJCXZhciB2YWx1ZXMgPSBpbnB1dC52YWwoKS5z cGxpdCgiLCIpOyAvLyBleGlzdGFudCBpZHMgYXJyYXkNCgkJCQkJdmFyIGltYWdlSWQgPSAk KHRoaXMpLnBhcmVudHMoIi5zcGlfaXV0bWNlX2ltYWdlX2NvbnRhaW5lciIpLmF0dHIoImNs YXNzIikucmVwbGFjZSgic3BpX2l1dG1jZV9pbWFnZV9jb250YWluZXIgaWQiLCIiKTsgLy8g Y3VycmVudCBpZA0KCQkJCQl2YXIgYXJyYXlJbmRleCA9ICQuaW5BcnJheShpbWFnZUlkLCB2 YWx1ZXMpOyAvLyBjaGVja3MgdGhpcyBpZCBpbmRleCBpbiBhcnJheQ0KCQkgICAgICAgICAg ICB2YWx1ZXMuc3BsaWNlKGFycmF5SW5kZXgsMSk7IC8vIGVsaW1pbmF0ZXMgdGhpcyBpZCBm cm9tIGFycmF5DQoJCQkJCWlucHV0LnZhbCh2YWx1ZXMpOyAgLy8gdXBkYXRlcyB2YWx1ZXMN CgkJCQkJJCh0aGlzKS5wYXJlbnRzKCIuc3BpX2l1dG1jZV9pbWFnZV9jb250YWluZXIiKS5y ZW1vdmUoKTsgLy8gUmVtb3ZlcyBpbWFnZSBjb250YWluZXINCgkJCQkJcmV0dXJuIGZhbHNl Ow0KCQkJCX0pOw0KCQkJfSk7DQoJCTwvc2NyaXB0Pg0KSlNfQ09ERTsNCiAgICB9DQoiO3M6 NDoidHlwZSI7czoxOiI1IjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToi MCI7czo0OiJoZWxwIjtiOjA7czozOiJtZDUiO3M6MzI6ImRlYzFjMDlkMDMzZjliMmVkYTQz NGY1OTAyNTA3NTU4Ijt9