Skip to content

Instantly share code, notes, and snippets.

@richtestani
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save richtestani/c062356b6a6411825db0 to your computer and use it in GitHub Desktop.
Save richtestani/c062356b6a6411825db0 to your computer and use it in GitHub Desktop.
A TextPattern plugin to quickly, add and remove images to an article image field.
# Name: rlt_article_image_selector v0.3
# Type: Admin plugin
# Quickly, add and remove images to an article image field.
# Author: Richard Testani
# URL: http://www.richtestani.com
# 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:
# .....................................................................
YToxMTp7czo0OiJuYW1lIjtzOjI2OiJybHRfYXJ0aWNsZV9pbWFnZV9zZWxlY3RvciI7czo2
OiJhdXRob3IiO3M6MTU6IlJpY2hhcmQgVGVzdGFuaSI7czoxMDoiYXV0aG9yX3VyaSI7czoy
NjoiaHR0cDovL3d3dy5yaWNodGVzdGFuaS5jb20iO3M6NzoidmVyc2lvbiI7czozOiIwLjMi
O3M6MTE6ImRlc2NyaXB0aW9uIjtzOjU3OiJRdWlja2x5LCBhZGQgYW5kIHJlbW92ZSBpbWFn
ZXMgdG8gYW4gYXJ0aWNsZSBpbWFnZSBmaWVsZC4iO3M6NDoiY29kZSI7czo4NDA4OiIvKioq
KioNCiogQW4gbXVsdGktaW1hZ2Ugc2VsZWN0b3IgZm9yIGFydGljbGVzDQoqIGV2ZW50OiBh
cnRpY2xlX3VpDQoqIHN0ZXA6IGFydGljbGVfaW1hZ2UNCioNCiogUkxUIE11bHRpIEltYWdl
IFNlbGVjdG9yIGFsbG93cyB5b3UgdG8gYWRkIGltYWdlcyB0byB5b3VyIGFydGljbGVfaW1h
Z2UgZmllbGQgcmlnaHQgaW4geW91ciB3cml0ZSB0YWIgd2luZG93Lg0KKiBBYm92ZSB5b3Vy
IGFydGljbGUgaW1hZ2UgZmllbGQgaXMgYW4gJ0FkZCBJbWFnZScgbGluaywganVzdCBjbGlj
ayBpdCBhbmQgY2hvb3NlIHRoZSBpbWFnZSB5b3Ugd2FudC4NCiogUkxUTUlTIHdpbGwgcmVt
b3ZlIGltYWdlcyB0aGF0IGFyZSBhbHJlYWR5IGF0dGFjaGVkIHRvIHRoaXMgYXJ0aWNsZS4N
CiovDQoNCmlmICggQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nICkNCnsNCgkkcmx0X21pcyAJ
PSAncmx0X211dGxpX2ltYWdlX3NlbGVjdG9yJzsNCglyZWdpc3Rlcl9jYWxsYmFjayAoICRy
bHRfbWlzLCAnYXJ0aWNsZV91aScsICdhcnRpY2xlX2ltYWdlJyk7DQp9DQoNCi8qKg0KKg0K
KiBUaGUgbWFpbiBmdW5jdGlvbiB3aGljaCBidWlsZCBvdXIgc2VsZWN0aW9uIGJveC4NCioN
CiovDQoNCmZ1bmN0aW9uIHJsdF9tdXRsaV9pbWFnZV9zZWxlY3RvcigkZXZlbnQsICRzdGVw
LCAkbWFya3VwLCAkcm93KSB7DQogICAgICAgIA0KICAgICAgICAkbWFya3VwIC49ICc8YnV0
dG9uIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImJ1dHRvbiBjcmVhdGUiIGlkPSJybHQt
YWRkLWltYWdlIj5BZGQgYSBuZXcgaW1hZ2U8L2J1dHRvbj4nOw0KICAgICAgICANCglnbG9i
YWwgJHByZWZzOw0KCQ0KCWV4dHJhY3QoJHJvdyk7DQogICAgICAgIA0KCSRjdXJyZW50SW1h
Z2VzICAgICAgICAgID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRJbWFnZSkp
Ow0KICAgICAgICANCiAgICAgICAgJGJhc2VQYXRoICAgICAgICAgICAgICA9ICRfU0VSVkVS
WydET0NVTUVOVF9ST09UJ107DQoJDQoJJHR4cEltYWdlIAkJPSAnLycgLiAkcHJlZnNbICdp
bWdfZGlyJyBdIC4gJy8nOw0KCQ0KCSRyZXN1bHQJCQk9IHNhZmVfcm93c19zdGFydCAoICcq
JywgJ3R4cF9pbWFnZScsICcxPTEnICk7DQoJDQoJJGltZ3MgCQkJPSBhcnJheSgpOw0KICAg
ICAgICANCiAgICAgICAgJGpzb25JbWdzICAgICAgICAgICAgICAgPSBhcnJheSgpOw0KCQ0K
CSRpbWFnZUNob29zZXIgICAgICAgICAgID0gJzxkaXYgaWQ9InJsdC1pbWFnZS1jaG9vc2Vy
IiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHotaW5kZXg6IDE7IHBhZGRpbmctdG9wOjEw
cHg7ICBkaXNwbGF5OiBub25lOyB3aWR0aDogNDAwcHg7IGhlaWdodDogNDIwcHg7IGJvcmRl
cjogMTBweCBzb2xpZCBncmF5OyBib3JkZXItcmFkaXVzOiA4cHg7IG92ZXJmbG93OiBzY3Jv
bGw7Ij4nOw0KCQ0KICAgICAgICAkaW1hZ2VDaG9vc2VyICAgICAgICAgIC49ICc8ZGl2IGlk
PSJybHQtaW1hZ2UtYm94LXRpdGxlIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHotaW5k
ZXg6IDU7IHRvcDogMDsgd2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGNlbnRlcjsgYmFja2dy
b3VuZC1jb2xvcjpzaWx2ZXIiPkltYWdlcyAoY2xpY2sgb25lIHRvIGFkZCB0byBhcnRpY2xl
IGltYWdlIGZpZWxkKTwvZGl2Pic7DQogICAgICAgDQoJLy9idWlsZCByZXN1bHRzDQoJaWYg
KCAkcmVzdWx0ICkgew0KCQkvL2xvb3AgaXQNCgkJd2hpbGUgKCAkaW1nID0gbmV4dFJvdyAo
ICRyZXN1bHQgKSApDQoJCXsNCiAgICAgICAgICAgICAgICAgICAgJGltZ3NbXSA9ICRpbWc7
DQoJCX0NCgl9IGVsc2UgcmV0dXJuIGZhbHNlOw0KCQ0KCS8vYnVpbGQgaHRtbA0KCSR0ZW1w
ID0gYXJyYXkoKTsNCiAgICAgICAgJGN1cmltZ3MgPSBhcnJheSgpOw0KCWZvcmVhY2goICRp
bWdzIGFzICR2YWwgKSANCiAgICAgICAgeyAgICAgICANCiAgICAgICAgICAgICAgICAkdGh1
bWIgID0gJHZhbFsnaWQnXS4ndCcuJHZhbFsnZXh0J107DQogICAgICAgICAgICAgICAgJGxh
cmdlICA9ICR2YWxbJ2lkJ10uJHZhbFsnZXh0J107DQogICAgICAgICAgICAgICAgDQogICAg
ICAgICAgICAgICAgJGltYWdlICA9ICggZmlsZV9leGlzdHMoJGJhc2VQYXRoLiR0eHBJbWFn
ZS4kdGh1bWIgKSApID8gJHR4cEltYWdlLiR0aHVtYiA6ICR0eHBJbWFnZS4kbGFyZ2U7DQog
ICAgICAgICAgICAgICAgJGltZ2lkICA9ICR2YWxbJ2lkJ107DQogICAgICAgICAgICAgICAg
JGltZ25hbWUgPSAoICFlbXB0eSgkdmFsWydjYXB0aW9uJ10pICkgPyAkdmFsWydjYXB0aW9u
J10gOiAkdmFsWyduYW1lJ107DQogICAgICAgICAgICAgICAgJGFkZF9yZW1vdmUgPSAoIWlu
X2FycmF5KCRpbWdpZCwgJGN1cnJlbnRJbWFnZXMpKSA/ICdhZGQnIDogJ3JlbW92ZSc7DQog
ICAgICAgICAgICAgICAgJHNlbGVjdGVkID0gKCFpbl9hcnJheSgkaW1naWQsICRjdXJyZW50
SW1hZ2VzKSkgPyAnYXZhaWxhYmxlJyA6ICdzZWxlY3RlZCc7DQogICAgICAgICAgICAgICAg
DQogICAgICAgICAgICAgICAgJHJsdF9pbWcgPSA8PDxJTUcNCiAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJybHQtaW1hZ2UtYm94IHJsdC0kc2VsZWN0ZWQiIHN0eWxlPSJwb3NpdGlv
bjpyZWxhdGl2ZTsgaGVpZ2h0OiAxMjBweDsgd2lkdGg6MjUlOyBmbG9hdDogbGVmdDsgd29y
ZC1icmVhazogYnJlYWstYWxsOyBvdmVyZmxvdzogaGlkZGVuOyIgaWQ9InJsdC1pbWFnZS0k
aW1naWQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJybHQtaW1hZ2UiIHN0
eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJGltYWdlKTsgYmFja2dyb3VuZC1zaXplOiBj
b3Zlcjsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiPg0KICAgICAgICAgICAgICAgICAg
ICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0icmx0LWxpbmsgcmx0LSRhZGRf
cmVtb3ZlLWltYWdlIiBkYXRhLWltYWdlLWlkPSIkaW1naWQiIHN0eWxlPSJkaXNwbGF5OiBi
bG9jazsgcG9zaXRpb246cmVsYXRpdmU7IHRleHQtYWxpZ246Y2VudGVyOyBjb2xvcjogd2hp
dGU7IGhlaWdodDogMTAwJTsgdGV4dC1zaGFkb3c6IDAgMXB4IDAgYmxhY2s7Ij4NCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJybHQtaW1nLW5hbWUiIHN0
eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjQwcHg7Ij4NCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPHNwYW4+JGltZ25hbWU8L3NwYW4+DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+
DQogICAgICAgICAgICAgICAgICAgIDwvZGl2PjwhLS0gZW5kIG9mIC5ybHQtaW1hZ2UgLS0+
DQogICAgICAgICAgICAgICAgPC9kaXY+PCEtLSBlbmQgb2YgLnJsdC1pbWFnZS1ib3ggLS0+
DQogICAgICAgICAgICAgICAgDQpJTUc7DQogICAgICAgICAgICAgICAgJHRlbXBbXSA9ICRy
bHRfaW1nOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8va2VlcCBhbHJl
YWR5IHNlbGVjdGVkIGltYWdlcyBvdXQNCiAgICAgICAgICAgICAgICBpZiggaW5fYXJyYXko
JGltZ2lkLCAkY3VycmVudEltYWdlcykgKSB7DQogICAgICAgICAgICAgICAgICAgICRjdXJp
bWdzW10gPSAkcmx0X2ltZzsNCiAgICAgICAgICAgICAgICB9DQoJfQ0KCQ0KCQ0KICAgICAg
ICAkY3VycmVudEltYWdlcyA9ICc8ZGl2IGlkPSJybHQtY3VycmVudC1pbWFnZXMiIHN0eWxl
PSJyZWxhdGl2ZTsgb3ZlcmZsb3c6aGlkZGVuOyBtYXJnaW4tdG9wOiAxMHB4Ij4nLmltcGxv
ZGUoIiIsJGN1cmltZ3MpLic8L2Rpdj4nOw0KICAgICAgICAkaW1hZ2VDaG9vc2VyIC49IGlt
cGxvZGUoIiIsICR0ZW1wKS4gJzwvZGl2Pic7DQogICAgICAgICRtYXJrdXAgLj0gJGN1cnJl
bnRJbWFnZXMuJGltYWdlQ2hvb3Nlci5idWlsZF9zY3JpcHQoKTsNCglyZXR1cm4gJG1hcmt1
cDsNCn0NCg0KZnVuY3Rpb24gYnVpbGRfc2NyaXB0KCkgew0KICAgJHNjcmlwdCA9IDw8PFND
UklQVA0KICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KICAgICAgICANCiAg
ICAgICAgZnVuY3Rpb24gcmx0X3RvZ2dsZV9pbWFnZV9jaG9vc2VyKCkgew0KICAgICAgICAg
ICAgDQogICAgICAgICAgICAvL3ZvaWxhIQ0KICAgICAgICAgICAgJCgnI3JsdC1pbWFnZS1j
aG9vc2VyJykuYW5pbWF0ZSh7DQogICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJywN
CiAgICAgICAgICAgICAgICB3aWR0aDogJ3RvZ2dsZScsDQogICAgICAgICAgICAgICAgaGVp
Z2h0OiAndG9nZ2xlJw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICANCiAgICAgICAg
fQ0KICAgICAgICANCiAgICAgICAgZnVuY3Rpb24gcmx0X2FkZF9pbWFnZShpbWcpIHsNCiAg
ICAgICAgICAgIHJsdF91cGRhdGVfaW1hZ2VzKGltZywgJ2FkZCcpOw0KICAgICAgICB9DQog
ICAgICAgIA0KICAgICAgICBmdW5jdGlvbiBybHRfcmVtb3ZlX2ltYWdlKGltZykgew0KICAg
ICAgICAgICAgcmx0X3VwZGF0ZV9pbWFnZXMoaW1nLCAncmVtb3ZlJyk7DQogICAgICAgIH0N
CiAgICAgICAgDQogICAgICAgIGZ1bmN0aW9uIHJsdF9pbnNlcnRfaW50byhibG9jaywgaHRt
bCkgew0KICAgICAgICAgICAgJCgnIycrYmxvY2spLmFwcGVuZChodG1sKTsNCiAgICAgICAg
fQ0KICAgICAgICANCiAgICAgICAgZnVuY3Rpb24gcmx0X3VwZGF0ZV9pbWFnZXMoaW1nLCBt
b2RlKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vZ2V0IGltYWdlIGlkDQogICAg
ICAgICAgICBpbWdfaWQgPSAkKGltZykuZGF0YSgnaW1hZ2UtaWQnKTsNCiAgICAgICAgICAg
IC8vZ2V0IGN1cnJlbnQgaW1hZ2VzDQogICAgICAgICAgICBpbWFnZXMgPSAkKCcjaW1hZ2Ug
LmFydGljbGUtaW1hZ2UgaW5wdXQnKS52YWwoKTsNCiAgICAgICAgICAgIC8vc2V0dXAgYXJy
YXkNCiAgICAgICAgICAgIGltYWdlcyA9ICggaW1hZ2VzICE9ICcnKSA/IGltYWdlcy5zcGxp
dCgiLCIpIDogW107DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vcHJvY2VzcyBpbWcN
CiAgICAgICAgICAgIHN3aXRjaCggbW9kZSApIHsNCiAgICAgICAgICAgICAgICBjYXNlICdh
ZGQnOg0KICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWdfaWQpOw0KICAgICAg
ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAg
ICBjYXNlICdyZW1vdmUnOg0KICAgICAgICAgICAgICAgICAgICBpbmRleCA9ICQuaW5BcnJh
eShpbWdfaWQudG9TdHJpbmcoKSwgaW1hZ2VzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYg
KCB+aW5kZXggKSBpbWFnZXMuc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8v
cmVhcHBseSBjaGFuZ2VzDQogICAgICAgICAgICAkKCcjaW1hZ2UgLmFydGljbGUtaW1hZ2Ug
aW5wdXQnKS52YWwoaW1hZ2VzLmpvaW4oIiwiKSk7DQogICAgICAgICAgICANCiAgICAgICAg
ICAgIA0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShm
dW5jdGlvbigpIHsNCiAgICAgICAgICAgIC8vVHVybiBvZmYgc2VsZWN0ZWQgaW1hZ2VzDQog
ICAgICAgICAgICAkKCcjcmx0LWltYWdlLWNob29zZXIgLnJsdC1zZWxlY3RlZCcpLmNzcyh7
DQogICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnDQogICAgICAgICAgICB9KQ0KICAg
ICAgICAgICAgDQogICAgICAgICAgICAvL1RvZ2dsZSB0aGUgaW1hZ2UgY2hvb3Nlcg0KICAg
ICAgICAgICAgJCgnI3JsdC1hZGQtaW1hZ2UsICNybHQtY2xvc2UtaW1hZ2UtYm94JykuY2xp
Y2soZnVuY3Rpb24oZXZlbnQpIHsNCiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOw0KICAgICAgICAgICAgICAgIHJsdF90b2dnbGVfaW1hZ2VfY2hvb3NlcigpOw0K
ICAgICAgICAgICAgfSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQWRkIGFuIGlt
YWdlIHRvIHRoaXMgYXJ0aWNsZQ0KICAgICAgICAgICAgJCgnI3JsdC1pbWFnZS1jaG9vc2Vy
Jykub24oJ2NsaWNrJywgJy5ybHQtYWRkLWltYWdlJywgZnVuY3Rpb24oZXZlbnQpIHsNCiAg
ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgp
Ow0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vc2V0IGltYWdlIGlkIGZv
ciByZWZlcmVuY2UNCiAgICAgICAgICAgICAgICB2YXIgaW1hZ2VfaWQgPSAkKHRoaXMpLmRh
dGEoJ2ltYWdlLWlkJyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9j
b3B5IGh0bWwNCiAgICAgICAgICAgICAgICBodG1sID0gJCgnI3JsdC1pbWFnZS1jaG9vc2Vy
ICNybHQtaW1hZ2UtJytpbWFnZV9pZCkuY2xvbmUoKTsNCiAgICAgICAgICAgICAgICANCiAg
ICAgICAgICAgICAgICAvL3BsYWNlIGludG8gb3VyIGN1cnJlbnQgaW1hZ2VzDQogICAgICAg
ICAgICAgICAgJCgnI3JsdC1jdXJyZW50LWltYWdlcycpLmFwcGVuZChodG1sKTsNCiAgICAg
ICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL2hpZGUgdGhlIGltYWdlIHdpdGhpbiB0
aGUgY2hvb3Nlcg0KICAgICAgICAgICAgICAgICQoJyNybHQtaW1hZ2UtY2hvb3NlciAjcmx0
LWltYWdlLScraW1hZ2VfaWQpLmZhZGVPdXQoKTsNCiAgICAgICAgICAgICAgICANCiAgICAg
ICAgICAgICAgICAvL3VwZGF0ZSBjbGFzc2VzDQogICAgICAgICAgICAgICAgJCgnI3JsdC1j
dXJyZW50LWltYWdlcyAjcmx0LWltYWdlLScraW1hZ2VfaWQpDQogICAgICAgICAgICAgICAg
ICAgICAgICAuYWRkQ2xhc3MoJ3JsdC1zZWxlY3RlZCcpDQogICAgICAgICAgICAgICAgICAg
ICAgICAucmVtb3ZlQ2xhc3MoJ3JsdC1hdmFpbGFibGUnKQ0KICAgICAgICAgICAgICAgICAg
ICAgICAgLmZpbmQoJ2EnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdy
bHQtcmVtb3ZlLWltYWdlJykNCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFz
cygncmx0LWFkZC1pbWFnZScpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAg
IC8vYWRkIGltYWdlIHRvIHRoZSBhcnRpY2xlIGltYWdlIGZpZWxkDQogICAgICAgICAgICAg
ICAgcmx0X2FkZF9pbWFnZSh0aGlzLCAnYWRkJyk7DQogICAgICAgICAgICAgICAgDQogICAg
ICAgICAgICB9KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy9SZW1vdmUgYW4gaW1h
Z2UgZnJvbSB0aGlzIGFydGljbGUNCiAgICAgICAgICAgICQoJyNybHQtY3VycmVudC1pbWFn
ZXMnICkub24oJ2NsaWNrJywgJy5ybHQtcmVtb3ZlLWltYWdlJywgZnVuY3Rpb24oZXZlbnQp
IHsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vc2V0IGltYWdl
IGlkIGZvciByZWZlcmVuY2UNCiAgICAgICAgICAgICAgICB2YXIgaW1hZ2VfaWQgPSAkKHRo
aXMpLmRhdGEoJ2ltYWdlLWlkJyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAg
ICAgLy9zaG93IHRoZSBpbWFnZSBpbiB0aGUgaW1hZ2UgY2hvb3Nlcg0KICAgICAgICAgICAg
ICAgICQoJyNybHQtaW1hZ2UtY2hvb3NlciAjcmx0LWltYWdlLScraW1hZ2VfaWQpLmZhZGVJ
bigpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vcmVtb3ZlIGltYWdl
IGZyb20gb3VyIGN1cnJlbnQgaW1hZ2VzDQogICAgICAgICAgICAgICAgJCgnI3JsdC1jdXJy
ZW50LWltYWdlcyAjcmx0LWltYWdlLScraW1hZ2VfaWQpLnJlbW92ZSgpOw0KICAgICAgICAg
ICAgICAgIA0KICAgICAgICAgICAgICAgIC8vdXBkYXRlIGNsYXNzZXMNCiAgICAgICAgICAg
ICAgICAkKCcjcmx0LWltYWdlLWNob29zZXIgI3JsdC1pbWFnZS0nK2ltYWdlX2lkKQ0KICAg
ICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdybHQtYXZhaWxhYmxlJykNCiAgICAg
ICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygncmx0LXNlbGVjdGVkJykNCiAgICAg
ICAgICAgICAgICAgICAgICAgIC5maW5kKCdhJykNCiAgICAgICAgICAgICAgICAgICAgICAg
IC5hZGRDbGFzcygncmx0LWFkZC1pbWFnZScpDQogICAgICAgICAgICAgICAgICAgICAgICAu
cmVtb3ZlQ2xhc3MoJ3JsdC1yZW1vdmUtaW1hZ2UnKTsNCiAgICAgICAgICAgICAgICANCiAg
ICAgICAgICAgICAgICAvL3JlbW92ZSBpbWFnZSBmcm9tIGFydGljbGUgaW1hZ2UgZmllbGQN
CiAgICAgICAgICAgICAgICBybHRfcmVtb3ZlX2ltYWdlKHRoaXMsICdyZW1vdmUnKTsNCiAg
ICAgICAgICAgIH0pDQogICAgICAgICAgICANCiAgICAgICAgfSk7DQogICAgPC9zY3JpcHQ+
DQpTQ1JJUFQ7DQogICAgIHJldHVybiAkc2NyaXB0Ow0KfSI7czo0OiJ0eXBlIjtzOjE6IjMi
O3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIwIjtzOjQ6ImhlbHAiO3M6
MTQ4MToiPGgyPldoYXQgaXMgQXJ0aWNsZSBJbWFnZSBTZWxlY3Rvcj88L2gyPgoKCTxwPkFy
dGljbGUgSW1hZ2UgU2VsZWN0b3IgYWxsb3dzIHlvdSB0byBjaG9vc2UgaW1hZ2VzIHRvIGF0
dGFjaCB0byBhbiBhcnRpY2xlLiBNYW5hZ2UgaW1hZ2VzIGZvciBhbnkgYXJ0aWNsZSBlYXNp
bHkgYW5kIGVmZmljaWVudGx5IGZyb20gYSBzaW5nbGUgbG9jYXRpb24uPC9wPgoKCTxoMj5I
b3cgZG9lcyBpdCB3b3JrPzwvaDI+CgoJPHA+T25jZSBpbnN0YWxsZWQsIGdvIHRvIGFuIGFy
dGljbGUgb3IgbmV3IGFydGljbGUuIFNjcm9sbCBkb3duIHRvIHRoZSBBcnRpY2xlIEltYWdl
IGZpZWxkIGFuZCBjbGljayB0aGUgJiM4MjE2O0FkZCBhbiBJbWFnZSYjODIxNzsgYnV0dG9u
LiBUaGlzIHdpbGwgZXhwYW5kIGEgaGlkZGVuIGJveCBzaG93aW5nIGFsbCBvZiB5b3VyIHVw
bG9hZGVkIGltYWdlcyAoZG9uZSB0aHJvdWdoIHRoZSBpbWFnZXMgdGFiKS4gSWYgeW91IGhh
dmUgbWFueSBpbWFnZXMsIHRoZSBwYWdlIGxvYWQgdGltZSBjYW4gdGFrZSBhd2hpbGUgYW5k
IGl0IGlzIHN1Z2dlc3RlZCB0byB1c2UgdGh1bWJuYWlscyBmb3IgeW91ciBpbWFnZXMsIGFz
IEFydGljbGUgSW1hZ2UgU2VsZWN0b3Igd2lsbCBsb29rIGZvciB0aG9zZSBmaXJzdC4gSWYg
dGhlIG51bWJlciBvZiBpbWFnZXMgdGFrZSB1cCBtb3JlIHNwYWNlIHRoZSBib3ggZ2VuZXJh
dGVkLCBhIHNjcm9sbCB3aWxsIGFsbG93IHlvdSB0byBtb3ZlIHRocm91Z2ggYWxsIG9mIHlv
dXIgaW1hZ2VzIHdpdGhpbiB0aGUgYm94LjwvcD4KCgk8cD5DbGljayBhbiBpbWFnZSB5b3Um
IzgyMTc7ZCBsaWtlIHRvIGFzc29jaWF0ZSB3aXRoIHlvdXIgYXJ0aWNsZS4gVGhlIGltYWdl
IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBib3ggYW5kIG1vdmVkIGFib3ZlIGl0IHdoZXJl
IGltYWdlcyBhc3NvY2lhdGUgd2l0aCB0aGUgYXJ0aWNsZSB3aWxsIGFwcGVhci48L3A+CgoJ
PHA+Q29udmVyc2VseSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlIGFuIGltYWdlLCBz
aW1wbHkgY2xpY2sgYW55IGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJ0aWNsZSBhbmQg
aXQgd2lsbCBubyBsb25nZXIgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcnRpY2xlLjwvcD4K
Cgk8cD48c3Ryb25nPlJlbWVtYmVyIHRvIGNsaWNrIFNhdmUhPC9zdHJvbmc+PC9wPgoKCTxw
PkFydGljbGUgSW1hZ2UgU2VsZWN0b3Igd2lsbCBtYWludGFpbiB0aGUgaW5kaXZpZHVhbCBp
bWFnZSBpZCYjODIxNztzIGZvciB5b3UsIHNvIHlvdSBjYW4gdmlzdWFsbHkgbWFuYWdlIHlv
dXIgaW1hZ2VzLjwvcD4KCgk8aDI+SG93IGRvIEkgc2hvdyB0aGVtIG9uIG15IHBhZ2U/PC9o
Mj4KCgk8cD5Vc2luZyBUZXh0UGF0dGVybiYjODIxNztzIGJ1aWx0LWluIHRhZ3MsIHNpbXBs
eSB1c2UgJmx0O3R4cDppbWFnZXMgLyZndDsgb3IgICZsdDt0eHA6YXJ0aWNsZV9pbWFnZSAv
Jmd0OyAgZm9yIGEgc2luZ2xlIGltYWdlLjwvcD4iO3M6MzoibWQ1IjtzOjMyOiJkNzYyYmY2
M2RlNTViZGNmMmExMWQ2NTlhZDk5M2EzYSI7fQ==
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment