# Name: tom_image_grid v0.4 # Type: Admin plugin # An optionnal grid display for images tab # Author: Thomas Jund # URL: http://sacripant.fr # 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: # ..................................................................... YToxNTp7czo0OiJuYW1lIjtzOjE0OiJ0b21faW1hZ2VfZ3JpZCI7czo3OiJ2ZXJzaW9uIjtz OjM6IjAuNCI7czo4OiJyZXZpc2lvbiI7czowOiIiO3M6NjoiYXV0aG9yIjtzOjExOiJUaG9t YXMgSnVuZCI7czoxMDoiYXV0aG9yX3VyaSI7czoxOToiaHR0cDovL3NhY3JpcGFudC5mciI7 czoxMToiZGVzY3JpcHRpb24iO3M6NDA6IkFuIG9wdGlvbm5hbCBncmlkIGRpc3BsYXkgZm9y IGltYWdlcyB0YWIiO3M6NToib3JkZXIiO3M6MToiNSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6 NToiZmxhZ3MiO3M6MDoiIjtzOjg6InRleHRwYWNrIjtzOjA6IiI7czoxMDoibG9hZF9vcmRl ciI7czoxOiI1IjtzOjQ6ImhlbHAiO3M6MjEwNzoiPGgxPnRvbV9pbWFnZV9ncmlkIDAuNDwv aDE+Cgo8cD48ZW0+dG9tX2ltYWdlX2dyaWQ8L2VtPiBpcyBhIHBsdWdpbiBmb3IgVGV4dHBh dHRlcm4gNC42LiogPHNwYW4gY2xhc3M9ImNhcHMiPkNNUzwvc3Bhbj4uIEl0IGFsbG93cyBh IG1vcmUgY29tcGFjdCBkaXNwbGF5IChhcyBhIGdyaWQpIG9mIHRoZSBpbWFnZXMgbGlzdC48 L3A+Cgo8cD5UaGUgcGx1Z2luIGFkZHMgdHdvIGJ1dHRvbnM8YnIgLz4KPGltZyBhbHQ9IiIg c3JjPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0 d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NEtQQ0ZFVDBOVVdWQkZJSE4yWnlCUVZVSk1T VU1nSWkwdkwxY3pReTh2UkZSRUlGTldSeUF4TGpFdkwwVk9JaUFpYUhSMGNEb3ZMM2QzZHk1 M015NXZjbWN2UjNKaGNHaHBZM012VTFaSEx6RXVNUzlFVkVRdmMzWm5NVEV1WkhSa0lqNEtQ SE4yWnlCMlpYSnphVzl1UFNJeExqRWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05 eVp5OHlNREF3TDNOMlp5SWdlRzFzYm5NNmVHeHBibXM5SW1oMGRIQTZMeTkzZDNjdWR6TXVi M0puTHpFNU9Ua3ZlR3hwYm1zaUlIZzlJakJ3ZUNJZ2VUMGlNSEI0SWlCM2FXUjBhRDBpTWpC d2VDSUtDU0JvWldsbmFIUTlJakl3Y0hnaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TUNBeU1DSWda VzVoWW14bExXSmhZMnRuY205MWJtUTlJbTVsZHlBd0lEQWdNakFnTWpBaUlIaHRiRHB6Y0dG alpUMGljSEpsYzJWeWRtVWlQZ284WnlCcFpEMGlaM0pwWkNJK0NnazhaejRLQ1FrOGNtVmpk Q0I0UFNJeklpQjVQU0l6SWlCM2FXUjBhRDBpTlM0Mk1ERWlJR2hsYVdkb2REMGlOUzQySWk4 K0Nna0pQSEpsWTNRZ2VEMGlNeUlnZVQwaU1URXVNems1SWlCM2FXUjBhRDBpTlM0Mk1ERWlJ R2hsYVdkb2REMGlOUzQyTURFaUx6NEtDUWs4Y21WamRDQjRQU0l4TVM0ek9Ua2lJSGs5SWpF eExqTTVPU0lnZDJsa2RHZzlJalV1TmpBeElpQm9aV2xuYUhROUlqVXVOakF4SWk4K0Nna0pQ SEpsWTNRZ2VEMGlNVEV1TXprNUlpQjVQU0l6SWlCM2FXUjBhRDBpTlM0Mk1ERWlJR2hsYVdk b2REMGlOUzQySWk4K0NnazhMMmMrQ2p3dlp6NEtQQzl6ZG1jK0NnPT0iIC8+IDxpbWcgYWx0 PSIiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2Ymow aU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejRLUENGRVQwTlVXVkJGSUhOMlp5QlFW VUpNU1VNZ0lpMHZMMWN6UXk4dlJGUkVJRk5XUnlBeExqRXZMMFZPSWlBaWFIUjBjRG92TDNk M2R5NTNNeTV2Y21jdlIzSmhjR2hwWTNNdlUxWkhMekV1TVM5RVZFUXZjM1puTVRFdVpIUmtJ ajRLUEhOMlp5QjJaWEp6YVc5dVBTSXhMakVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5j ekxtOXlaeTh5TURBd0wzTjJaeUlnZUcxc2JuTTZlR3hwYm1zOUltaDBkSEE2THk5M2QzY3Vk ek11YjNKbkx6RTVPVGt2ZUd4cGJtc2lJSGc5SWpCd2VDSWdlVDBpTUhCNElpQjNhV1IwYUQw aU1qQndlQ0lLQ1NCb1pXbG5hSFE5SWpJd2NIZ2lJSFpwWlhkQ2IzZzlJakFnTUNBeU1DQXlN Q0lnWlc1aFlteGxMV0poWTJ0bmNtOTFibVE5SW01bGR5QXdJREFnTWpBZ01qQWlJSGh0YkRw emNHRmpaVDBpY0hKbGMyVnlkbVVpUGdvOFp5QnBaRDBpYkdsdVpTSStDZ2s4Y0dGMGFDQmtQ U0pOTXk0NE1URXNNVFF1TVRBM2RqSXVPRGc1U0RBdU9EUTBkaTB5TGpnNE9VZ3pMamd4TVhv Z1RUQXVPRFEwTERndU5UVTFkakl1T0RnMmFESXVPVFkzVmpndU5UVTFTREF1T0RRMGVpQk5N VGt1TVRVMUxERXhMalEwTVZZNExqVTFOVWcyTGpFMk9YWXlMamc0TmtneE9TNHhOVFY2Q2dr SklFMHhPUzR4TlRVc01UWXVPVGsyZGkweUxqZzRPVWcyTGpFMk9YWXlMamc0T1VneE9TNHhO VFY2SUUwd0xqZzBOQ3d6ZGpJdU9EZzVhREl1T1RZM1ZqTklNQzQ0TkRSNklFMHhPUzR4TlRV c05TNDRPRGxXTTBnMkxqRTJPWFl5TGpnNE9VZ3hPUzR4TlRWNklpOCtDand2Wno0S1BDOXpk bWMrQ2c9PSIgLz48YnIgLz4KaW4gdGhlIEltYWdlIFRhYiBvZiB5b3VyIGJhY2stb2ZmaWNl IGFsbG93aW5nIHlvdSB0byBzd2l0Y2ggZnJvbSB0aGUgc3RhbmRhcmQgZGlzcGxheSB0byBh IG1vcmUgY29tcGFjdCBncmlkIGRpc3BsYXkuPC9wPiI7czozOiJjc3MiO3M6MDoiIjtzOjQ6 ImNvZGUiO3M6NjcxMToiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgewogICAgcmVn aXN0ZXJfY2FsbGJhY2soICd0b21faW1hZ2VfZ3JpZF9tYXJrdXAnLCAnaW1hZ2VfdWknLCAn ZXh0ZW5kX2NvbnRyb2xzJyk7CiAgICByZWdpc3Rlcl9jYWxsYmFjayggJ3RvbV9pbWFnZV9n cmlkX2NzcycsICJpbWFnZSIpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soICd0b21faW1hZ2Vf Z3JpZF9qcycsICJpbWFnZSIpOwp9CgpmdW5jdGlvbiB0b21faW1hZ2VfZ3JpZF9tYXJrdXAo KQp7CiAgICAkb3V0ID0gPDw8SFRNTAoKPGZvcm0gaWQ9InRvbV9pZ19vcHRpb25zIj4KICAg IDxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InRvbV9pZ19vcHRpb24iIGlkPSJ0 b21faWdfb3B0aW9uLS1ncmlkIiAvPjxzcGFuIGNsYXNzPSJ0b21faWdfaWNvbi1ncmlkIj5H cmlkPC9zcGFuPjwvbGFiZWw+CiAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1l PSJ0b21faWdfb3B0aW9uIiBpZD0idG9tX2lnX29wdGlvbi0tbGluZSIgLz48c3BhbiBjbGFz cz0idG9tX2lnX2ljb24tbGluZSI+TGluZTwvc3Bhbj48L2xhYmVsPgo8L2Zvcm0+CkhUTUw7 CiAgICBlY2hvICRvdXQ7Cn0KCmZ1bmN0aW9uIHRvbV9pbWFnZV9ncmlkX2NzcygpCnsKICAg ICRzb3J0YnkgPSBnVHh0KCdzb3J0X2J5Jyk7CiAgICAkb3V0ID0gPDw8Q1NTCgo8c3R5bGUg dHlwZT0idGV4dC9jc3MiPgovKgoqKiBDU1MgZm9yIHRvbV9pbWFnZV9ncmlkIHBsdWdpbgoq KiBCeSBTYWNyaXBhbnQg4oCUIFRob21hcyBKdW5kCioqIGh0dHA6Ly9zYWNyaXBhbnQuZnIK Ki8KCi50b21faWcgLnR4cC1saXN0ICogewogICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXIt Ym94OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoudG9tX2lnIC50eHAtbGlzdHRh YmxlcyB7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLnRvbV9pZyNwYWdlLWltYWdlIC50eHAt bGlzdCB0aGVhZCB0aCB7CiAgICAvKmRpc3BsYXk6IG5vbmU7Ki8KICAgIGRpc3BsYXk6IGlu bGluZS1ibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiBhdXRvOwoK fQoudG9tX2lnI3BhZ2UtaW1hZ2UgLnR4cC1saXN0IHRoZWFkIHRoLmltYWdlc19kZXRhaWwg ewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci50b21faWcjcGFnZS1pbWFnZSAu dHhwLWxpc3QgdGhlYWQgdGgudHhwLWxpc3QtY29sLW11bHRpLWVkaXQgewogICAgbWFyZ2lu LXJpZ2h0OiAxZW07Cn0KLnRvbV9pZyNwYWdlLWltYWdlIC50eHAtbGlzdCB0aGVhZCB0aC50 eHAtbGlzdC1jb2wtbXVsdGktZWRpdDphZnRlciB7CiAgICBjb250ZW50OiBhdHRyKHRpdGxl KTsKICAgIHBhZGRpbmctbGVmdDogLjMzZW07Cn0KCi50b21faWcjcGFnZS1pbWFnZSAudHhw LWxpc3QgdGhlYWQgdGgudHhwLWxpc3QtY29sLWlkIHsKICAgIG1hcmdpbi1sZWZ0OiAzLjZl bTsKfQoudG9tX2lnI3BhZ2UtaW1hZ2UgLnR4cC1saXN0IHRoZWFkIHRoLnR4cC1saXN0LWNv bC1pZDpiZWZvcmUgewogICAgY29udGVudDogIlNvcnQgYnkiOwogICAgZGlzcGxheTogYmxv Y2s7CiAgICBwYWRkaW5nOiBpbmhlcml0OwogICAgcGFkZGluZy1sZWZ0OiAwOwogICAgcGFk ZGluZy1yaWdodDogLjMzZW07CgogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2lkdGg6 IDMuNmVtOwogICAgcmlnaHQ6IDEwMCU7CiAgICB0b3A6IDA7CgogICAgdGV4dC1hbGlnbjog cmlnaHQ7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9CgoKLnRvbV9pZyNwYWdlLWltYWdl IC50eHAtbGlzdCB0Ym9keSB0ciB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAv KnZlcnRpY2FsLWFsaWduOiBtaWQ7Ki8KICAgIHdpZHRoOiAxNWVtOwogICAgbWFyZ2luOiAu NjZlbSAxZW0gMCAwCn0KCi50b21faWcjcGFnZS1pbWFnZSAudHhwLWxpc3QgdGJvZHkgdGQs Ci50b21faWcjcGFnZS1pbWFnZSAudHhwLWxpc3QgdGJvZHkgdGggewogICAgZGlzcGxheTog YmxvY2s7CiAgICBwYWRkaW5nOiAwLjE2ZW0gMC4zM2VtOwogICAgdGV4dC1vdmVyZmxvdzog ZWxsaXBzaXM7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgd2hpdGUtc3BhY2U6IG5vd3Jh cDsKfQoKLnRvbV9pZyNwYWdlLWltYWdlIC50eHAtbGlzdCB0ZC50eHAtbGlzdC1jb2wtbXVs dGktZWRpdCB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICB3aWR0aDogYXV0bzsKfQoudG9tX2ln I3BhZ2UtaW1hZ2UgLnR4cC1saXN0IHRkLnR4cC1saXN0LWNvbC1tdWx0aS1lZGl0IGlucHV0 IHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi50b21faWcjcGFnZS1pbWFnZSAudHhwLWxp c3QgdGQudHhwLWxpc3QtY29sLXRodW1ibmFpbCB7CiAgICBoZWlnaHQ6IDEyZW07Cn0KCi50 b21faWcjcGFnZS1pbWFnZSAudHhwLWxpc3QgdGQudHhwLWxpc3QtY29sLXRodW1ibmFpbCBp bWcgewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIGhl aWdodDogYXV0bzsKICAgIHdpZHRoOiBhdXRvOwp9CgovKiBObyB0aHVtYm5haWwgZGlzcGxh eSAqLwoudG9tX2lnI3BhZ2UtaW1hZ2UgLnR4cC1saXN0IHRkLnR4cC1saXN0LWNvbC10aHVt Ym5haWw6bm90KC5oYXMtdGh1bWJuYWlsKSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJh Y2tncm91bmQtY29sb3I6ICNlZWU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CgogICAgaGVp Z2h0OiAxMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXItd2lkdGg6IDUuMjVlbSA1 LjVlbTsKICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICBib3JkZXItdG9wLWNvbG9yOiAj ZWVlOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2VlZTsKICAgIGJvcmRlci1sZWZ0LWNv bG9yOiAjZGRkOwogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZGRkOwp9CgoKCkBtZWRpYSBv bmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpIHsKICAgIC50b21faWcjcGFnZS1p bWFnZSAudHhwLWxpc3QgdGJvZHkgdHIgewogICAgICAgIHdpZHRoOiAxNDBweDsKICAgICAg ICBtYXJnaW46IC42NmVtIC4zM2VtIDAgMDsKICAgIH0KCiAgICAudG9tX2lnI3BhZ2UtaW1h Z2UgLnR4cC1saXN0IHRkLnRodW1ibmFpbCB7CiAgICAgICAgaGVpZ2h0OiAxMTJweDsKICAg IH0KCiAgICAudG9tX2lnIC50b21faWctLW5vVGh1bWIgewogICAgICAgIGJvcmRlci13aWR0 aDogNDVweCA0MHB4OwogICAgfQoKCn0KCi8qYnV0dG9ucwotLS0tLS0tLS0tKi8KCiN0b21f aWdfb3B0aW9ucyBpbnB1dCB7CiAgICBkaXNwbGF5OiBub25lOwp9CgojdG9tX2lnX29wdGlv bnMgbGFiZWwgewogICAgcGFkZGluZzogLjE2ZW07CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxv Y2s7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIHdpZHRoOiAyMHB4 OwogICAgaGVpZ2h0OiAyMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQojdG9tX2lnX29w dGlvbnMgbGFiZWwuc2VsZWN0ZWQgewogICAgYm9yZGVyLWNvbG9yOiAjYWFhOwp9Ci50b21f aWdfaWNvbi1ncmlkOmJlZm9yZSB7CiAgICBjb250ZW50OiB1cmwoImRhdGE6aW1hZ2Uvc3Zn K3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRY Um1MVGdpUHo0S1BDRkVUME5VV1ZCRklITjJaeUJRVlVKTVNVTWdJaTB2TDFjelF5OHZSRlJF SUZOV1J5QXhMakV2TDBWT0lpQWlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZSM0poY0docFkz TXZVMVpITHpFdU1TOUVWRVF2YzNabk1URXVaSFJrSWo0S1BITjJaeUIyWlhKemFXOXVQU0l4 TGpFaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VH MXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNp SUhnOUlqQndlQ0lnZVQwaU1IQjRJaUIzYVdSMGFEMGlNakJ3ZUNJS0NTQm9aV2xuYUhROUlq SXdjSGdpSUhacFpYZENiM2c5SWpBZ01DQXlNQ0F5TUNJZ1pXNWhZbXhsTFdKaFkydG5jbTkx Ym1ROUltNWxkeUF3SURBZ01qQWdNakFpSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaVBn bzhaeUJwWkQwaVozSnBaQ0krQ2drOFp6NEtDUWs4Y21WamRDQjRQU0l6SWlCNVBTSXpJaUIz YVdSMGFEMGlOUzQyTURFaUlHaGxhV2RvZEQwaU5TNDJJaTgrQ2drSlBISmxZM1FnZUQwaU15 SWdlVDBpTVRFdU16azVJaUIzYVdSMGFEMGlOUzQyTURFaUlHaGxhV2RvZEQwaU5TNDJNREVp THo0S0NRazhjbVZqZENCNFBTSXhNUzR6T1RraUlIazlJakV4TGpNNU9TSWdkMmxrZEdnOUlq VXVOakF4SWlCb1pXbG5hSFE5SWpVdU5qQXhJaTgrQ2drSlBISmxZM1FnZUQwaU1URXVNems1 SWlCNVBTSXpJaUIzYVdSMGFEMGlOUzQyTURFaUlHaGxhV2RvZEQwaU5TNDJJaTgrQ2drOEwy YytDand2Wno0S1BDOXpkbWMrQ2c9PSIpOwp9Ci50b21faWdfaWNvbi1saW5lOmJlZm9yZSB7 CiAgICBjb250ZW50OiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dk bVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0S1BDRkVUME5VV1ZC RklITjJaeUJRVlVKTVNVTWdJaTB2TDFjelF5OHZSRlJFSUZOV1J5QXhMakV2TDBWT0lpQWlh SFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZSM0poY0docFkzTXZVMVpITHpFdU1TOUVWRVF2YzNa bk1URXVaSFJrSWo0S1BITjJaeUIyWlhKemFXOXVQU0l4TGpFaUlIaHRiRzV6UFNKb2RIUndP aTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhB Nkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpSUhnOUlqQndlQ0lnZVQwaU1IQjRJ aUIzYVdSMGFEMGlNakJ3ZUNJS0NTQm9aV2xuYUhROUlqSXdjSGdpSUhacFpYZENiM2c5SWpB Z01DQXlNQ0F5TUNJZ1pXNWhZbXhsTFdKaFkydG5jbTkxYm1ROUltNWxkeUF3SURBZ01qQWdN akFpSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaVBnbzhaeUJwWkQwaWJHbHVaU0krQ2dr OGNHRjBhQ0JrUFNKTk15NDRNVEVzTVRRdU1UQTNkakl1T0RnNVNEQXVPRFEwZGkweUxqZzRP VWd6TGpneE1Yb2dUVEF1T0RRMExEZ3VOVFUxZGpJdU9EZzJhREl1T1RZM1ZqZ3VOVFUxU0RB dU9EUTBlaUJOTVRrdU1UVTFMREV4TGpRME1WWTRMalUxTlVnMkxqRTJPWFl5TGpnNE5rZ3hP UzR4TlRWNkNna0pJRTB4T1M0eE5UVXNNVFl1T1RrMmRpMHlMamc0T1VnMkxqRTJPWFl5TGpn NE9VZ3hPUzR4TlRWNklFMHdMamcwTkN3emRqSXVPRGc1YURJdU9UWTNWak5JTUM0NE5EUjZJ RTB4T1M0eE5UVXNOUzQ0T0RsV00wZzJMakUyT1hZeUxqZzRPVWd4T1M0eE5UVjZJaTgrQ2p3 dlp6NEtQQzl6ZG1jK0NnPT0iKTsKfQoKPC9zdHlsZT4KQ1NTOwogICAgZWNobyAkb3V0Owp9 CgpmdW5jdGlvbiB0b21faW1hZ2VfZ3JpZF9qcygpCnsKICAgICRvdXQgPSA8PDxKUwoKPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovKgoqKiBKUyBmb3IgdG9tX2ltYWdlX2dy aWQgcGx1Z2luCioqIEJ5IFNhY3JpcGFudCDigJQgVGhvbWFzIEp1bmQKKiogaHR0cDovL3Nh Y3JpcGFudC5mcgoqLwoKJChmdW5jdGlvbigpIHsKICAgIHZhciBpbWFnZURpc3BsYXlPcHRp b24gPSAkKCIjdG9tX2lnX29wdGlvbnMiKQogICAgLCAgIHJhZGlvcyA9ICQoJ2lucHV0Jywg aW1hZ2VEaXNwbGF5T3B0aW9uKQogICAgLCAgIGxpc3R0YWJsZXMgPSAkKCcudHhwLWxpc3R0 YWJsZXMnKQogICAgLyosICAgaW1hZ2VzVHIgPSAkKCd0cicsIGxpc3R0YWJsZXMpKi8KICAg ICwgICBjb29raWUgPSAndG9tX2ltYWdlX2dyaWQnCiAgICAsICAgY29va2llVmFsdWUgPSBn ZXRDb29raWUoY29va2llKQogICAgOwoKCiAgICAvLyBBZGQgcmFkaW9zIGluIHRhYgogICAg aW1hZ2VEaXNwbGF5T3B0aW9uLnByZXBlbmRUbyhsaXN0dGFibGVzKTsKCgogICAgLy8gQ2hh bmdlIExheW91dCB3aGVuIHJhZGlvIGNoZWNrZWQKICAgIHJhZGlvcy5jaGFuZ2UoZnVuY3Rp b24oZXZlbnQpCiAgICB7CiAgICAgICAgaWYgKCB0aGlzLmlkID09PSAidG9tX2lnX29wdGlv bi0tZ3JpZCIpCiAgICAgICAgewogICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ3Rv bV9pZycpOwogICAgICAgICAgICBzZXRDb29raWUoY29va2llLCAndG9tX2lnX29wdGlvbi0t Z3JpZCcpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAk KCdib2R5JykucmVtb3ZlQ2xhc3MoJ3RvbV9pZycpOwogICAgICAgICAgICBzZXRDb29raWUo Y29va2llLCAndG9tX2lnX29wdGlvbi0tbGluZScpCiAgICAgICAgfQoKICAgICAgICByYWRp b3MucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CiAgICAgICAgJCh0aGlzKS5w YXJlbnQoKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKICAgIH0pOwoKICAgIC8vIENoZWNrICYg Y3JlYXRlIGNvb2tpZQogICAgaWYgKCBjb29raWVWYWx1ZSApCiAgICB7CiAgICAgICAgdmFy IHRhcmdldFJhZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29va2llVmFsdWUpOwog ICAgfQogICAgZWxzZQogICAgewogICAgICAgIHZhciB0YXJnZXRSYWRpbyA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCd0b21faWdfb3B0aW9uLS1saW5lJyk7CiAgICAgICAgc2V0Q29v a2llKGNvb2tpZSwgJ3RvbV9pZ19vcHRpb24tLWxpbmUnKQogICAgfTsKCiAgICAkKHRhcmdl dFJhZGlvKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSkudHJpZ2dlcigiY2hhbmdlIik7Cn0pOwo8 L3NjcmlwdD4KCkpTOwogICAgZWNobyAkb3V0Owp9IjtzOjM6Im1kNSI7czozMjoiNTIxZjNi YzNjZmQ3OTkyNGQ3NmZmZjVkMDRmNGZkNjIiO30=