summaryrefslogtreecommitdiff
path: root/pkg/riseupvpn/snap/hooks
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2018-03-01 14:02:12 +0100
committerKali Kaneko <kali@leap.se>2018-03-02 03:54:22 +0100
commitfd48ad43c727b22693f20d1659768ed5733996da (patch)
treed9c6d64890527db168dce531bcfd3123c809e74b /pkg/riseupvpn/snap/hooks
parent7fc83d53ea8a2b974bdf058e9e86706441f63147 (diff)
[pkg] remove install hook, it's autogenerated
Diffstat (limited to 'pkg/riseupvpn/snap/hooks')
-rwxr-xr-xpkg/riseupvpn/snap/hooks/install648
1 files changed, 0 insertions, 648 deletions
diff --git a/pkg/riseupvpn/snap/hooks/install b/pkg/riseupvpn/snap/hooks/install
deleted file mode 100755
index 6d8a9d03..00000000
--- a/pkg/riseupvpn/snap/hooks/install
+++ /dev/null
@@ -1,648 +0,0 @@
-#!/usr/bin/env python
-# This helper installs bitmask-root and polkit policy file
-import subprocess
-from base64 import decodestring as decode
-
-BMROOT = """IyEvdXNyL2Jpbi9weXRob24yLjcKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdo
-dCAoQykgMjAxNCBMRUFQCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh
-biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
-aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUg
-U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK
-IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlz
-IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJ
-VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
-IyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
-ZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwoj
-IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
-YyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov
-L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMKIiIiClRoaXMgaXMgYSBwcml2aWxlZ2VkIGhlbHBl
-ciBzY3JpcHQgZm9yIHNhZmVseSBydW5uaW5nIGNlcnRhaW4gY29tbWFuZHMgYXMgcm9vdC4KSXQg
-c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBCaXRtYXNrIGFwcGxpY2F0aW9uLgoKRXhwZWN0
-ZWQgcGF0aHM6CgogIFdoZW4gaW5zdGFsbGVkIGJ5IGRpc3RybyBwYXRoOgogICAgL3Vzci9zYmlu
-L2JpdG1hc2stcm9vdAoKICBXaGVuIGluc3RhbGxlZCBieSBidW5kbGUgb3IgZnJvbSBnaXQ6CiAg
-ICAvdXNyL2xvY2FsL3NiaW4vYml0bWFzay1yb290CgpVU0FHRToKICBiaXRtYXNrLXJvb3QgZmly
-ZXdhbGwgc3RvcAogIGJpdG1hc2stcm9vdCBmaXJld2FsbCBzdGFydCBbcmVzdGFydF0gR0FURVdB
-WTEgR0FURVdBWTIgLi4uCiAgYml0bWFzay1yb290IG9wZW52cG4gc3RvcAogIGJpdG1hc2stcm9v
-dCBvcGVudnBuIHN0YXJ0IENPTkZJRzEgQ09ORklHMSAuLi4KICBiaXRtYXNrLXJvb3QgZnctZW1h
-aWwgc3RvcAogIGJpdG1hc2stcm9vdCBmdy1lbWFpbCBzdGFydCB1aWQKCkFsbCBhY3Rpb25zIHJl
-dHVybiBleGl0IGNvZGUgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgoKVGhlIGBv
-cGVudnBuIHN0YXJ0YCBhY3Rpb24gaXMgc3BlY2lhbDogaXQgY2FsbHMgZXhlYyBvbiBvcGVudnBu
-IGFuZCByZXBsYWNlcwp0aGUgY3VycmVudCBwcm9jZXNzLiBJZiB0aGUgYHJlc3RhcnRgIHBhcmFt
-ZXRlciBpcyBwYXNzZWQsIHRoZSBmaXJld2FsbCB3aWxsCm5vdCBiZSB0ZWFyZWQgZG93biBpbiB0
-aGUgY2FzZSBvZiBhbiBlcnJvciBkdXJpbmcgbGF1bmNoLgoiIiIKIyBUT0RPIHNob3VsZCBiZSB0
-ZXN0ZWQgd2l0aCBweXRob24zLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgb24gc29tZSBkaXN0
-cm8uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KaW1wb3J0IG9zCmltcG9y
-dCByZQppbXBvcnQgc2lnbmFsCmltcG9ydCBzb2NrZXQKaW1wb3J0IHN5c2xvZwppbXBvcnQgc3Vi
-cHJvY2VzcwppbXBvcnQgc3lzCmltcG9ydCBzdGF0CmltcG9ydCB0cmFjZWJhY2sKCmNtZGNoZWNr
-ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQKCiMKIyBDT05TVEFOVFMKIwoKCmRlZiBnZXRfbm9f
-Z3JvdXBfbmFtZSgpOgogICAgIiIiCiAgICBSZXR1cm4gdGhlIHJpZ2h0IGdyb3VwIG5hbWUgdG8g
-dXNlIGZvciB0aGUgY3VycmVudCBPUy4KICAgIEV4YW1wbGVzOgogICAgICAgIC0gVWJ1bnR1OiBu
-b2dyb3VwCiAgICAgICAgLSBBcmNoOiBub2JvZHkKCiAgICA6cnR5cGU6IHN0ciBvciBOb25lCiAg
-ICAiIiIKICAgIGltcG9ydCBncnAKICAgIHRyeToKICAgICAgICBncnAuZ2V0Z3JuYW0oJ25vYm9k
-eScpCiAgICAgICAgcmV0dXJuICdub2JvZHknCiAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAg
-dHJ5OgogICAgICAgICAgICBncnAuZ2V0Z3JuYW0oJ25vZ3JvdXAnKQogICAgICAgICAgICByZXR1
-cm4gJ25vZ3JvdXAnCiAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICByZXR1cm4g
-Tm9uZQoKClZFUlNJT04gPSAiOCIKU0NSSVBUID0gImJpdG1hc2stcm9vdCIKTkFNRVNFUlZFUl9U
-Q1AgPSAiMTAuNDEuMC4xIgpOQU1FU0VSVkVSX1VEUCA9ICIxMC40Mi4wLjEiCiMgZm9yIHRoZSB0
-aW1lIGJlaW5nLCB3ZSdyZSBoYXJkY29kaW5nIHRjcCBvbiBjb25uZWN0aW9uIHBhcmFtcy4KTkFN
-RVNFUlZFUiA9IE5BTUVTRVJWRVJfVENQCkJJVE1BU0tfQ0hBSU4gPSAiYml0bWFzayIKQklUTUFT
-S19DSEFJTl9OQVRfT1VUID0gImJpdG1hc2siCkJJVE1BU0tfQ0hBSU5fTkFUX1BPU1QgPSAiYml0
-bWFza19wb3N0cm91dGluZyIKQklUTUFTS19DSEFJTl9FTUFJTCA9ICJiaXRtYXNrX2VtYWlsIgpC
-SVRNQVNLX0NIQUlOX0VNQUlMX09VVCA9ICJiaXRtYXNrX2VtYWlsX291dHB1dCIKTE9DQUxfSU5U
-RVJGQUNFID0gImxvIgpJTUFQX1BPUlQgPSAiMTk4NCIKU01UUF9QT1JUID0gIjIwMTMiCgpJUCA9
-ICIvc2Jpbi9pcCIKSVBUQUJMRVMgPSAiL3NiaW4vaXB0YWJsZXMiCklQNlRBQkxFUyA9ICIvc2Jp
-bi9pcDZ0YWJsZXMiCgpPUEVOVlBOX1VTRVIgPSAibm9ib2R5IgpPUEVOVlBOX0dST1VQID0gZ2V0
-X25vX2dyb3VwX25hbWUoKQpMRUFQT1BFTlZQTiA9ICJMRUFQT1BFTlZQTiIKT1BFTlZQTl9TWVNU
-RU1fQklOID0gIi91c3Ivc2Jpbi9vcGVudnBuIiAgIyBEZWJpYW4gbG9jYXRpb24KT1BFTlZQTl9M
-RUFQX0JJTiA9ICIvdXNyL2xvY2FsL3NiaW4vbGVhcC1vcGVudnBuIiAgIyBpbnN0YWxsZWQgYnkg
-YnVuZGxlCgpGSVhFRF9GTEFHUyA9IFsKICAgICItLXNldGVudiIsICJMRUFQT1BFTlZQTiIsICIx
-IiwKICAgICItLW5vYmluZCIsCiAgICAiLS1jbGllbnQiLAogICAgIi0tZGV2IiwgInR1biIsCiAg
-ICAiLS10bHMtY2xpZW50IiwKICAgICItLXJlbW90ZS1jZXJ0LXRscyIsICJzZXJ2ZXIiLAogICAg
-Ii0tbWFuYWdlbWVudC1zaWduYWwiLAogICAgIi0tc2NyaXB0LXNlY3VyaXR5IiwgIjEiLAogICAg
-Ii0tdXNlciIsICJub2JvZHkiLAogICAgIi0tcGVyc2lzdC1rZXkiLAogICAgIi0tcGVyc2lzdC1s
-b2NhbC1pcCIsCl0KCmlmIE9QRU5WUE5fR1JPVVAgaXMgbm90IE5vbmU6CiAgICBGSVhFRF9GTEFH
-Uy5leHRlbmQoWyItLWdyb3VwIiwgT1BFTlZQTl9HUk9VUF0pCgpBTExPV0VEX0ZMQUdTID0gewog
-ICAgIi0tcmVtb3RlIjogWyJJUCIsICJOVU1CRVIiLCAiUFJPVE8iXSwKICAgICItLXRscy1jaXBo
-ZXIiOiBbIkNJUEhFUiJdLAogICAgIi0tY2lwaGVyIjogWyJDSVBIRVIiXSwKICAgICItLWF1dGgi
-OiBbIkNJUEhFUiJdLAogICAgIi0tbWFuYWdlbWVudCI6IFsiRElSIiwgIlVOSVhTT0NLRVQiXSwK
-ICAgICItLW1hbmFnZW1lbnQtY2xpZW50LXVzZXIiOiBbIlVTRVIiXSwKICAgICItLWNlcnQiOiBb
-IkZJTEUiXSwKICAgICItLWtleSI6IFsiRklMRSJdLAogICAgIi0tY2EiOiBbIkZJTEUiXSwKICAg
-ICItLWZyYWdtZW50IjogWyJOVU1CRVIiXSwKICAgICItLWtlZXBhbGl2ZSI6IFsiTlVNQkVSIiwg
-Ik5VTUJFUiJdLAogICAgIi0tdmVyYiI6IFsiTlVNQkVSIl0sCn0KClBBUkFNX0ZPUk1BVFMgPSB7
-CiAgICAiTlVNQkVSIjogbGFtYmRhIHM6IHJlLm1hdGNoKCJeXGQrJCIsIHMpLAogICAgIlBST1RP
-IjogbGFtYmRhIHM6IHJlLm1hdGNoKCJeKHRjcHx1ZHB8dGNwNHx1ZHA0KSQiLCBzKSwKICAgICJJ
-UCI6IGxhbWJkYSBzOiBpc192YWxpZF9hZGRyZXNzKHMpLAogICAgIkNJUEhFUiI6IGxhbWJkYSBz
-OiByZS5tYXRjaCgiXltBLVowLTktXSskIiwgcyksCiAgICAiVVNFUiI6IGxhbWJkYSBzOiByZS5t
-YXRjaCgKICAgICAgICAiXlthLXpBLVowLTlfXC5cQF1bYS16QS1aMC05X1wtXC5cQF0qXCQ/JCIs
-IHMpLCAgIyBJRUVFIFN0ZCAxMDAzLjEtMjAwMQogICAgIkZJTEUiOiBsYW1iZGEgczogb3MucGF0
-aC5pc2ZpbGUocyksCiAgICAiRElSIjogbGFtYmRhIHM6IG9zLnBhdGguaXNkaXIob3MucGF0aC5z
-cGxpdChzKVswXSksCiAgICAiVU5JWFNPQ0tFVCI6IGxhbWJkYSBzOiBzID09ICJ1bml4IiwKICAg
-ICJVSUQiOiBsYW1iZGEgczogcmUubWF0Y2goIl5bYS16QS1aMC05XSskIiwgcykKfQoKIyBEZXRl
-cm1pbmUgUXViZXMgT1MgdmVyc2lvbiwgaWYgYW55ClFVQkVTX1BST1hZID0gb3MucGF0aC5leGlz
-dHMoIi92YXIvcnVuL3F1YmVzL3RoaXMtaXMtcHJveHl2bSIpCmlmIG9zLnBhdGguaXNkaXIoIi9l
-dGMvcXViZXMiKToKICAgIFFVQkVTX0NGRyA9ICIvcncvY29uZmlnLyIKICAgIFFVQkVTX0lQSE9P
-SyA9IFFVQkVTX0NGRyArICJxdWJlcy1pcC1jaGFuZ2UtaG9vayIKICAgIFFVQkVTX0ZXX1NDUklQ
-VCA9IFFVQkVTX0NGRyArICJxdWJlcy1maXJld2FsbC11c2VyLXNjcmlwdCIKICAgIGlmIHN1YnBy
-b2Nlc3MuY2FsbChbSVBUQUJMRVMsICItLWxpc3QiLCAiUUJTLUZPUldBUkQiXSkgPT0gMDoKICAg
-ICAgICBRVUJFU19WRVIgPSA0CiAgICBlbHNlOgogICAgICAgIFFVQkVTX1ZFUiA9IDMKZWxzZToK
-ICAgICMgbm90IGEgUXViZXMgc3lzdGVtCiAgICBRVUJFU19WRVIgPSAwCgoKREVCVUcgPSBvcy5n
-ZXRlbnYoIkRFQlVHIikKVEVTVCA9IG9zLmdldGVudigiVEVTVCIpCgppZiBERUJVRzoKICAgIGlt
-cG9ydCBsb2dnaW5nCiAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigKICAgICAgICAi
-JShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcyIpCiAg
-ICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCiAgICBjaC5zZXRMZXZlbChsb2dnaW5nLkRF
-QlVHKQogICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKICAgIGxvZ2dlciA9IGxvZ2dpbmcu
-Z2V0TG9nZ2VyKF9fbmFtZV9fKQogICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCiAg
-ICBsb2dnZXIuYWRkSGFuZGxlcihjaCkKCnN5c2xvZy5vcGVubG9nKFNDUklQVCkKCiMKIyBVVElM
-SVRZCiMKCgpkZWYgaXNfdmFsaWRfYWRkcmVzcyh2YWx1ZSk6CiAgICAiIiIKICAgIFZhbGlkYXRl
-IHRoYXQgdGhlIHBhc3NlZCBpcCBpcyBhIHZhbGlkIElQIGFkZHJlc3MuCgogICAgOnBhcmFtIHZh
-bHVlOiB0aGUgdmFsdWUgdG8gYmUgdmFsaWRhdGVkCiAgICA6dHlwZSB2YWx1ZTogc3RyCiAgICA6
-cnR5cGU6IGJvb2wKICAgICIiIgogICAgdHJ5OgogICAgICAgIHNvY2tldC5pbmV0X2F0b24odmFs
-dWUpCiAgICAgICAgcmV0dXJuIFRydWUKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgbG9n
-KCIlczogRVJST1I6IE1BTEZPUk1FRCBJUDogJXMhIiAlIChTQ1JJUFQsIHZhbHVlKSkKICAgICAg
-ICByZXR1cm4gRmFsc2UKCgpkZWYgc3BsaXRfbGlzdChfbGlzdCwgcmVnZXgpOgogICAgIiIiCiAg
-ICBTcGxpdCBhIGxpc3QgYmFzZWQgb24gYSByZWdleDoKICAgIGUuZy4gc3BsaXRfbGlzdChbInh4
-IiwgInl5IiwgIngxIiwgInp6Il0sICJeeCIpID0+IFtbInh4IiwgInl5Il0sIFsieDEiLAogICAg
-Inp6Il1dCgogICAgOnBhcmFtIF9saXN0OiB0aGUgbGlzdCB0byBiZSBzcGxpdC4KICAgIDp0eXBl
-IF9saXN0OiBsaXN0CiAgICA6cGFyYW0gcmVnZXg6IHRoZSByZWdleCBleHByZXNzaW9uIHRvIGZp
-bHRlciB3aXRoLgogICAgOnR5cGUgcmVnZXg6IHN0cgoKICAgIDpydHlwZTogbGlzdAogICAgIiIi
-CiAgICBpZiBub3QgaGFzYXR0cihyZWdleCwgIm1hdGNoIik6CiAgICAgICAgcmVnZXggPSByZS5j
-b21waWxlKHJlZ2V4KQogICAgcmVzdWx0ID0gW10KICAgIGkgPSAwCiAgICBpZiBub3QgX2xpc3Q6
-CiAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgd2hpbGUgVHJ1ZToKICAgICAgICBpZiByZWdleC5t
-YXRjaChfbGlzdFtpXSk6CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoW10pCiAgICAgICAgICAg
-IHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICByZXN1bHRbLTFdLmFwcGVuZChfbGlzdFtpXSkK
-ICAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICAgICAgaWYgaSA+PSBsZW4oX2xpc3Qp
-IG9yIHJlZ2V4Lm1hdGNoKF9saXN0W2ldKToKICAgICAgICAgICAgICAgICAgICBicmVhawogICAg
-ICAgIGVsc2U6CiAgICAgICAgICAgIGkgKz0gMQogICAgICAgIGlmIGkgPj0gbGVuKF9saXN0KToK
-ICAgICAgICAgICAgYnJlYWsKICAgIHJldHVybiByZXN1bHQKCgpkZWYgZ2V0X3Byb2Nlc3NfbGlz
-dCgpOgogICAgIiIiCiAgICBHZXQgYSBwcm9jZXNzIGxpc3QgYnkgcmVhZGluZyBgL3Byb2NgIGZp
-bGVzeXN0ZW0uCgogICAgOnJldHVybjogYSBsaXN0IG9mIHR1cGxlcywgZWFjaCBjb250YWluaW5n
-IHBpZCBhbmQgY29tbWFuZCBzdHJpbmcuCiAgICA6cnR5cGU6IHR1cGxlIGlmIGxpc3RzCiAgICAi
-IiIKICAgIHJlcyA9IFtdCiAgICBwaWRzID0gW3BpZCBmb3IgcGlkIGluIG9zLmxpc3RkaXIoJy9w
-cm9jJykgaWYgcGlkLmlzZGlnaXQoKV0KCiAgICBmb3IgcGlkIGluIHBpZHM6CiAgICAgICAgdHJ5
-OgogICAgICAgICAgICByZXMuYXBwZW5kKChwaWQsIG9wZW4oCiAgICAgICAgICAgICAgICBvcy5w
-YXRoLmpvaW4oCiAgICAgICAgICAgICAgICAgICAgJy9wcm9jJywgcGlkLCAnY21kbGluZScpLCAn
-cmInKS5yZWFkKCkpKQogICAgICAgIGV4Y2VwdCBJT0Vycm9yOiAgIyBwcm9jIGhhcyBhbHJlYWR5
-IHRlcm1pbmF0ZWQKICAgICAgICAgICAgY29udGludWUKICAgIHJldHVybiBmaWx0ZXIoTm9uZSwg
-cmVzKQoKCmRlZiBydW4oY29tbWFuZCwgKmFyZ3MsICoqb3B0aW9ucyk6CiAgICAiIiIKICAgIFJ1
-biBhbiBleHRlcm5hbCBjb21tYW5kLgoKICAgIE9wdGlvbnM6CgogICAgICBgY2hlY2tgOiBJZiBU
-cnVlLCBjaGVjayB0aGUgY29tbWFuZCdzIG91dHB1dC4gYmFpbCBpZiBub24temVyby4gKHRoZQog
-ICAgICAgICAgICAgICBkZWZhdWx0IGlzIHRydWUgdW5sZXNzIGRldGFjaCBvciBpbnB1dCBpcyB0
-cnVlKQogICAgICBgZXhpdGNvZGVgOiBsaWtlIGBjaGVja2AsIGJ1dCByZXR1cm4gZXhpdGNvZGUg
-aW5zdGVhZCBvZiBiYWlsaW5nLgogICAgICBgZGV0YWNoYDogSWYgVHJ1ZSwgcnVuIGluIGRldGFj
-aGVkIHByb2Nlc3MuCiAgICAgIGBpbnB1dGA6IElmIFRydWUsIG9wZW4gY29tbWFuZCBmb3Igd3Jp
-dGluZyBzdHJlYW0gdG8sIHJldHVybmluZyB0aGUgUG9wZW4KICAgICAgICAgICAgICAgb2JqZWN0
-LgogICAgICBgdGhyb3dgOiBJZiBUcnVlLCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlcmUgaXMg
-YW4gZXJyb3IgaW5zdGVhZAogICAgICAgICAgICAgICBvZiBiYWlsaW5nLgogICAgIiIiCiAgICBw
-YXJ0cyA9IFtjb21tYW5kXQogICAgcGFydHMuZXh0ZW5kKGFyZ3MpCiAgICBkZWJ1ZygiJXMgcnVu
-OiAlcyAiICUgKFNDUklQVCwgIiAiLmpvaW4ocGFydHMpKSkKCiAgICBfY2hlY2sgPSBvcHRpb25z
-LmdldCgiY2hlY2siLCBUcnVlKQogICAgX2RldGFjaCA9IG9wdGlvbnMuZ2V0KCJkZXRhY2giLCBG
-YWxzZSkKICAgIF9pbnB1dCA9IG9wdGlvbnMuZ2V0KCJpbnB1dCIsIEZhbHNlKQogICAgX2V4aXRj
-b2RlID0gb3B0aW9ucy5nZXQoImV4aXRjb2RlIiwgRmFsc2UpCiAgICBfdGhyb3cgPSBvcHRpb25z
-LmdldCgidGhyb3ciLCBGYWxzZSkKCiAgICBpZiBub3QgKF9jaGVjayBvciBfdGhyb3cpIG9yIF9k
-ZXRhY2ggb3IgX2lucHV0OgogICAgICAgIGlmIF9pbnB1dDoKICAgICAgICAgICAgcmV0dXJuIHN1
-YnByb2Nlc3MuUG9wZW4ocGFydHMsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKICAgICAgICBlbHNl
-OgogICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKHBhcnRzKQogICAgICAgICAgICByZXR1cm4g
-Tm9uZQogICAgZWxzZToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRldm51bGwgPSBvcGVuKCcv
-ZGV2L251bGwnLCAndycpCiAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChwYXJ0cywg
-c3Rkb3V0PWRldm51bGwsIHN0ZGVycj1kZXZudWxsKQogICAgICAgICAgICByZXR1cm4gMAogICAg
-ICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CiAgICAgICAg
-ICAgIGlmIF9leGl0Y29kZToKICAgICAgICAgICAgICAgIGlmIGV4Yy5yZXR1cm5jb2RlICE9IDE6
-CiAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEgaXMgdG8gYmUgZXhwZWN0ZWQsIGJ1dCBhbnl0
-aGluZyBlbHNlCiAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgYmUgbG9nZ2VkLgogICAgICAg
-ICAgICAgICAgICAgIGRlYnVnKCJFUlJPUjogQ291bGQgbm90IHJ1biAlczogJXMiICUKICAgICAg
-ICAgICAgICAgICAgICAgICAgICAoZXhjLmNtZCwgZXhjLm91dHB1dCksIGV4Y2VwdGlvbj1leGMp
-CiAgICAgICAgICAgICAgICByZXR1cm4gZXhjLnJldHVybmNvZGUKICAgICAgICAgICAgZWxpZiBf
-dGhyb3c6CiAgICAgICAgICAgICAgICByYWlzZSBleGMKICAgICAgICAgICAgZWxzZToKICAgICAg
-ICAgICAgICAgIGJhaWwoIkVSUk9SOiBDb3VsZCBub3QgcnVuICVzOiAlcyIgJSAoZXhjLmNtZCwg
-ZXhjLm91dHB1dCksCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbj1leGMpCgoKZGVmIGxv
-Zyhtc2c9Tm9uZSwgZXhjZXB0aW9uPU5vbmUsIHByaW9yaXR5PXN5c2xvZy5MT0dfSU5GTyk6CiAg
-ICAiIiIKICAgIHByaW50IGFuZCBsb2cgd2FybmluZyBtZXNzYWdlIG9yIGV4Y2VwdGlvbi4KCiAg
-ICA6cGFyYW0gbXNnOiBvcHRpb25hbCBlcnJvciBtZXNzYWdlLgogICAgOnR5cGUgbXNnOiBzdHIK
-ICAgIDpwYXJhbSBtc2c6IG9wdGlvbmFsIGV4Y2VwdGlvbi4KICAgIDp0eXBlIG1zZzogRXhjZXB0
-aW9uCiAgICA6cGFyYW0gbXNnOiBzeXNsb2cgbGV2ZWwKICAgIDp0eXBlIG1zZzogb25lIG9mIExP
-R19FTUVSRywgTE9HX0FMRVJULCBMT0dfQ1JJVCwgTE9HX0VSUiwKICAgICAgICAgICAgICAgTE9H
-X1dBUk5JTkcsIExPR19OT1RJQ0UsIExPR19JTkZPLCBMT0dfREVCVUcKICAgICIiIgogICAgaWYg
-bXNnIGlzIG5vdCBOb25lOgogICAgICAgIHByaW50KCIlczogJXMiICUgKFNDUklQVCwgbXNnKSkK
-ICAgICAgICBzeXNsb2cuc3lzbG9nKHByaW9yaXR5LCBtc2cpCiAgICBpZiBleGNlcHRpb24gaXMg
-bm90IE5vbmU6CiAgICAgICAgaWYgVEVTVCBvciBERUJVRzoKICAgICAgICAgICAgdHJhY2ViYWNr
-LnByaW50X2V4YygpCiAgICAgICAgc3lzbG9nLnN5c2xvZyhwcmlvcml0eSwgdHJhY2ViYWNrLmZv
-cm1hdF9leGMoKSkKCgpkZWYgZGVidWcobXNnPU5vbmUsIGV4Y2VwdGlvbj1Ob25lKToKICAgICIi
-IgogICAgSnVzdCBsaWtlIGxvZywgYnV0IGlzIHNraXBwZWQgdW5sZXNzIERFQlVHLiBVc2Ugc3lz
-bG9nLkxPR19JTkZPCiAgICBldmVuIGZvciBkZWJ1ZyBtZXNzYWdlcyAod2UgZG9uJ3Qgd2FudCB0
-byBtaXNzIHRoZW0pLgogICAgIiIiCiAgICBpZiBURVNUIG9yIERFQlVHOgogICAgICAgIGxvZyht
-c2csIGV4Y2VwdGlvbikKCgpkZWYgYmFpbChtc2c9Tm9uZSwgZXhjZXB0aW9uPU5vbmUpOgogICAg
-IiIiCiAgICBhYm5vcm1hbCBleGl0LiBsaWtlIGxvZygpLCBidXQgZXhpdHMgd2l0aCBlcnJvciBz
-dGF0dXMgY29kZS4KICAgICIiIgogICAgbG9nKG1zZywgZXhjZXB0aW9uKQogICAgZXhpdCgxKQoK
-IwojIE9QRU5WUE4KIwoKCmRlZiBnZXRfb3BlbnZwbl9iaW4oKToKICAgICIiIgogICAgUmV0dXJu
-IHRoZSBwYXRoIGZvciBlaXRoZXIgdGhlIHN5c3RlbSBvcGVudnBuIG9yIHRoZSBvbmUgdGhlCiAg
-ICBidW5kbGUgaGFzIHB1dCB0aGVyZS4KICAgICIiIgogICAgaWYgb3MucGF0aC5pc2ZpbGUoT1BF
-TlZQTl9TWVNURU1fQklOKToKICAgICAgICByZXR1cm4gT1BFTlZQTl9TWVNURU1fQklOCgogICAg
-IyB0aGUgYnVuZGxlIG9wdGlvbiBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBkZWJpYW4gcGFj
-a2FnZS4KICAgIGlmIG9zLnBhdGguaXNmaWxlKE9QRU5WUE5fTEVBUF9CSU4pOgogICAgICAgIHJl
-dHVybiBPUEVOVlBOX0xFQVBfQklOCgoKZGVmIHBhcnNlX29wZW52cG5fZmxhZ3MoYXJncyk6CiAg
-ICAiIiIKICAgIFRha2UgYXJndW1lbnQgbGlzdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYW5kIHBh
-cnNlIGl0LCBvbmx5IGFsbG93aW5nIHNvbWUKICAgIGNvbmZpZ3VyYXRpb24gZmxhZ3MuCgogICAg
-OnR5cGUgYXJnczogbGlzdAogICAgIiIiCiAgICByZXN1bHQgPSBbXQogICAgdHJ5OgogICAgICAg
-IGZvciBmbGFnIGluIHNwbGl0X2xpc3QoYXJncywgIl4tLSIpOgogICAgICAgICAgICBmbGFnX25h
-bWUgPSBmbGFnWzBdCiAgICAgICAgICAgIGlmIGZsYWdfbmFtZSBpbiBBTExPV0VEX0ZMQUdTOgog
-ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmbGFnX25hbWUpCiAgICAgICAgICAgICAgICBy
-ZXF1aXJlZF9wYXJhbXMgPSBBTExPV0VEX0ZMQUdTW2ZsYWdfbmFtZV0KICAgICAgICAgICAgICAg
-IGlmIHJlcXVpcmVkX3BhcmFtczoKICAgICAgICAgICAgICAgICAgICAjIGZsYXR0ZW4gaWYgc2Vw
-YXJhdGVkIGJ5IHNwYWNlcwogICAgICAgICAgICAgICAgICAgIGZsYWdfcGFyYW1zID0gW2kgZm9y
-IHN1Ymxpc3QgaW4gbWFwKAogICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgczogcy5zcGxp
-dCgpLCBmbGFnWzE6XSkgZm9yIGkgaW4gc3VibGlzdF0KICAgICAgICAgICAgICAgICAgICBpZiBs
-ZW4oZmxhZ19wYXJhbXMpICE9IGxlbihyZXF1aXJlZF9wYXJhbXMpOgogICAgICAgICAgICAgICAg
-ICAgICAgICBsb2coIiVzOiBFUlJPUjogbm90IGVub3VnaCBwYXJhbXMgZm9yICVzIiAlCiAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAoU0NSSVBULCBmbGFnX25hbWUpKQogICAgICAgICAgICAg
-ICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbSwgcGFy
-YW1fdHlwZSBpbiB6aXAoZmxhZ19wYXJhbXMsIHJlcXVpcmVkX3BhcmFtcyk6CiAgICAgICAgICAg
-ICAgICAgICAgICAgIGlmIFBBUkFNX0ZPUk1BVFNbcGFyYW1fdHlwZV0ocGFyYW0pOgogICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYXJhbSkKICAgICAgICAgICAgICAg
-ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiJXM6IEVSUk9S
-OiBCYWQgYXJndW1lbnQgJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NS
-SVBULCBwYXJhbSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAg
-ICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nKCJXQVJOSU5HOiB1bnJlY29nbml6ZWQg
-b3BlbnZwbiBmbGFnICVzIiAlIGZsYWdfbmFtZSkKICAgICAgICByZXR1cm4gcmVzdWx0CiAgICBl
-eGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICBsb2coIiVzOiBFUlJPUiBQQVJTSU5HIEZM
-QUdTOiAlcyIgJSAoU0NSSVBULCBleGMpKQogICAgICAgIGlmIERFQlVHOgogICAgICAgICAgICBs
-b2dnZXIuZXhjZXB0aW9uKGV4YykKICAgICAgICByZXR1cm4gTm9uZQoKCmRlZiBvcGVudnBuX3N0
-YXJ0KGFyZ3MpOgogICAgIiIiCiAgICBMYXVuY2ggb3BlbnZwbiwgc2FuaXRpemluZyBpbnB1dCwg
-YW5kIHJlcGxhY2luZyB0aGUgY3VycmVudCBwcm9jZXNzIHdpdGgKICAgIHRoZSBvcGVudnBuIHBy
-b2Nlc3MuCgogICAgOnBhcmFtIGFyZ3M6IGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gb3BlbnZw
-bgogICAgOnR5cGUgYXJnczogbGlzdAogICAgIiIiCiAgICBvcGVudnBuX2ZsYWdzID0gcGFyc2Vf
-b3BlbnZwbl9mbGFncyhhcmdzKQogICAgaWYgb3BlbnZwbl9mbGFnczoKICAgICAgICBPUEVOVlBO
-ID0gZ2V0X29wZW52cG5fYmluKCkKICAgICAgICBmbGFncyA9IFtPUEVOVlBOXSArIEZJWEVEX0ZM
-QUdTICsgb3BlbnZwbl9mbGFncwogICAgICAgIGlmIERFQlVHOgogICAgICAgICAgICBsb2coIiVz
-OiBydW5uaW5nIG9wZW52cG4gd2l0aCBmbGFnczoiICUgKFNDUklQVCwpKQogICAgICAgICAgICBs
-b2coZmxhZ3MpCiAgICAgICAgIyBub3RlOiBmaXJzdCBhcmd1bWVudCB0byBjb21tYW5kIGlzIGln
-bm9yZWQsIGJ1dCBjdXN0b21hcmlseSBzZXQgdG8KICAgICAgICAjIHRoZSBjb21tYW5kLgogICAg
-ICAgIG9zLmV4ZWN2KE9QRU5WUE4sIGZsYWdzKQogICAgZWxzZToKICAgICAgICBiYWlsKCdFUlJP
-UjogY291bGQgbm90IHBhcnNlIG9wZW52cG4gb3B0aW9ucycpCgoKZGVmIG9wZW52cG5fc3RvcChh
-cmdzKToKICAgICIiIgogICAgU3RvcCB0aGUgb3BlbnZwbiB0aGF0IGhhcyBsaWtlbHkgYmVlbiBs
-YXVuY2hlZCBieSBiaXRtYXNrLgoKICAgIDpwYXJhbSBhcmdzOiBhcmd1bWVudHMgdG8gb3BlbnZw
-bgogICAgOnR5cGUgYXJnczogbGlzdAogICAgIiIiCiAgICBwbGlzdCA9IGdldF9wcm9jZXNzX2xp
-c3QoKQogICAgT1BFTlZQTl9CSU4gPSBnZXRfb3BlbnZwbl9iaW4oKQogICAgZm91bmRfbGVhcF9v
-cGVudnBuID0gZmlsdGVyKAogICAgICAgIGxhbWJkYSAocCwgcyk6IHMuc3RhcnRzd2l0aChPUEVO
-VlBOX0JJTikgYW5kIExFQVBPUEVOVlBOIGluIHMsCiAgICAgICAgcGxpc3QpCgogICAgaWYgZm91
-bmRfbGVhcF9vcGVudnBuOgogICAgICAgIHBpZCA9IGZvdW5kX2xlYXBfb3BlbnZwblswXVswXQog
-ICAgICAgIG9zLmtpbGwoaW50KHBpZCksIHNpZ25hbC5TSUdURVJNKQoKIwojIEZJUkVXQUxMCiMK
-CgpkZWYgZ2V0X2dhdGV3YXlzKGdhdGV3YXlzKToKICAgICIiIgogICAgRmlsdGVyIGEgcGFzc2Vk
-IHNlcXVlbmNlIG9mIGdhdGV3YXlzLCByZXR1cm5pbmcgb25seSB0aGUgdmFsaWQgb25lcy4KCiAg
-ICA6cGFyYW0gZ2F0ZXdheXM6IGEgc2VxdWVuY2Ugb2YgZ2F0ZXdheXMgdG8gZmlsdGVyLgogICAg
-OnR5cGUgZ2F0ZXdheXM6IGl0ZXJhYmxlCiAgICA6cnR5cGU6IGl0ZXJhYmxlCiAgICAiIiIKICAg
-IHJlc3VsdCA9IGZpbHRlcihpc192YWxpZF9hZGRyZXNzLCBnYXRld2F5cykKICAgIGlmIG5vdCBy
-ZXN1bHQ6CiAgICAgICAgYmFpbCgiRVJST1I6IE5vIHZhbGlkIGdhdGV3YXlzIHNwZWNpZmllZCIp
-CiAgICBlbHNlOgogICAgICAgIHJldHVybiByZXN1bHQKCgpkZWYgZ2V0X2RlZmF1bHRfZGV2aWNl
-KCk6CiAgICAiIiIKICAgIFJldHJpZXZlIHRoZSBjdXJyZW50IGRlZmF1bHQgbmV0d29yayBkZXZp
-Y2UuCgogICAgOnJ0eXBlOiBzdHIKICAgICIiIgogICAgcm91dGVzID0gc3VicHJvY2Vzcy5jaGVj
-a19vdXRwdXQoW0lQLCAicm91dGUiLCAic2hvdyJdKQogICAgbWF0Y2ggPSByZS5zZWFyY2goIl5k
-ZWZhdWx0IC4qZGV2IChbXlxzXSopIC4qJCIsIHJvdXRlcywgZmxhZ3M9cmUuTSkKICAgIGlmIG1h
-dGNoIGFuZCBtYXRjaC5ncm91cHMoKToKICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMSkKICAg
-IGVsc2U6CiAgICAgICAgYmFpbCgiQ291bGQgbm90IGZpbmQgZGVmYXVsdCBkZXZpY2UiKQoKCmRl
-ZiBnZXRfbG9jYWxfbmV0d29ya19pcHY0KGRldmljZSk6CiAgICAiIiIKICAgIEdldCB0aGUgbG9j
-YWwgaXB2NCBhZGRyZXMgZm9yIGEgZ2l2ZW4gZGV2aWNlLgoKICAgIDpwYXJhbSBkZXZpY2U6CiAg
-ICA6dHlwZSBkZXZpY2U6IHN0cgogICAgIiIiCiAgICBhZGRyZXNzZXMgPSBjbWRjaGVjayhbSVAs
-ICItbyIsICJhZGRyZXNzIiwgInNob3ciLCAiZGV2IiwgZGV2aWNlXSkKICAgIG1hdGNoID0gcmUu
-c2VhcmNoKCJeLippbmV0IChbXiBdKikgLiokIiwgYWRkcmVzc2VzLCBmbGFncz1yZS5NKQogICAg
-aWYgbWF0Y2ggYW5kIG1hdGNoLmdyb3VwcygpOgogICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgx
-KQogICAgZWxzZToKICAgICAgICByZXR1cm4gTm9uZQoKCmRlZiBnZXRfbG9jYWxfbmV0d29ya19p
-cHY2KGRldmljZSk6CiAgICAiIiIKICAgIEdldCB0aGUgbG9jYWwgaXB2NiBhZGRyZXMgZm9yIGEg
-Z2l2ZW4gZGV2aWNlLgoKICAgIDpwYXJhbSBkZXZpY2U6CiAgICA6dHlwZSBkZXZpY2U6IHN0cgog
-ICAgIiIiCiAgICBhZGRyZXNzZXMgPSBjbWRjaGVjayhbSVAsICItbyIsICJhZGRyZXNzIiwgInNo
-b3ciLCAiZGV2IiwgZGV2aWNlXSkKICAgIG1hdGNoID0gcmUuc2VhcmNoKCJeLippbmV0NiAoW14g
-XSopIC4qJCIsIGFkZHJlc3NlcywgZmxhZ3M9cmUuTSkKICAgIGlmIG1hdGNoIGFuZCBtYXRjaC5n
-cm91cHMoKToKICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMSkKICAgIGVsc2U6CiAgICAgICAg
-cmV0dXJuIE5vbmUKCgpkZWYgcnVuX2lwdGFibGVfd2l0aF9jaGVjayhjbWQsICphcmdzLCAqKm9w
-dGlvbnMpOgogICAgIiIiCiAgICBSdW4gYW4gaXB0YWJsZXMgY29tbWFuZCBjaGVja2luZyB0byBz
-ZWUgaWYgaXQgc2hvdWxkOgogICAgICBmb3IgLS1hcHBlbmQ6IHJ1biBvbmx5IGlmIHJ1bGUgZG9l
-cyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAgZm9yIC0taW5zZXJ0OiBydW4gb25seSBpZiBydWxl
-IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgICAgIGZvciAtLWRlbGV0ZTogcnVuIG9ubHkgaWYg
-cnVsZSBkb2VzIGV4aXN0LgogICAgb3RoZXIgY29tbWFuZHMgYXJlIHJ1biBub3JtYWxseS4KICAg
-ICIiIgogICAgaWYgIi0taW5zZXJ0IiBpbiBhcmdzOgogICAgICAgIGNoZWNrX2FyZ3MgPSBbYXJn
-LnJlcGxhY2UoIi0taW5zZXJ0IiwgIi0tY2hlY2siKSBmb3IgYXJnIGluIGFyZ3NdCiAgICAgICAg
-Y2hlY2tfY29kZSA9IHJ1bihjbWQsICpjaGVja19hcmdzLCBleGl0Y29kZT1UcnVlKQogICAgICAg
-IGlmIGNoZWNrX2NvZGUgIT0gMDoKICAgICAgICAgICAgcnVuKGNtZCwgKmFyZ3MsICoqb3B0aW9u
-cykKICAgIGVsaWYgIi0tYXBwZW5kIiBpbiBhcmdzOgogICAgICAgIGNoZWNrX2FyZ3MgPSBbYXJn
-LnJlcGxhY2UoIi0tYXBwZW5kIiwgIi0tY2hlY2siKSBmb3IgYXJnIGluIGFyZ3NdCiAgICAgICAg
-Y2hlY2tfY29kZSA9IHJ1bihjbWQsICpjaGVja19hcmdzLCBleGl0Y29kZT1UcnVlKQogICAgICAg
-IGlmIGNoZWNrX2NvZGUgIT0gMDoKICAgICAgICAgICAgcnVuKGNtZCwgKmFyZ3MsICoqb3B0aW9u
-cykKICAgIGVsaWYgIi0tZGVsZXRlIiBpbiBhcmdzOgogICAgICAgIGNoZWNrX2FyZ3MgPSBbYXJn
-LnJlcGxhY2UoIi0tZGVsZXRlIiwgIi0tY2hlY2siKSBmb3IgYXJnIGluIGFyZ3NdCiAgICAgICAg
-Y2hlY2tfY29kZSA9IHJ1bihjbWQsICpjaGVja19hcmdzLCBleGl0Y29kZT1UcnVlKQogICAgICAg
-IGlmIGNoZWNrX2NvZGUgPT0gMDoKICAgICAgICAgICAgcnVuKGNtZCwgKmFyZ3MsICoqb3B0aW9u
-cykKICAgIGVsc2U6CiAgICAgICAgcnVuKGNtZCwgKmFyZ3MsICoqb3B0aW9ucykKCgpkZWYgaXB0
-YWJsZXMoKmFyZ3MsICoqb3B0aW9ucyk6CiAgICAiIiIKICAgIFJ1biBpcHRhYmxlczQgYW5kIGlw
-dGFibGVzNi4KICAgICIiIgogICAgaXA0dGFibGVzKCphcmdzLCAqKm9wdGlvbnMpCiAgICBpcDZ0
-YWJsZXMoKmFyZ3MsICoqb3B0aW9ucykKCgpkZWYgaXA0dGFibGVzKCphcmdzLCAqKm9wdGlvbnMp
-OgogICAgIiIiCiAgICBSdW4gaXB0YWJsZXM0IHdpdGggY2hlY2tzLgogICAgIiIiCiAgICBydW5f
-aXB0YWJsZV93aXRoX2NoZWNrKElQVEFCTEVTLCAqYXJncywgKipvcHRpb25zKQoKCmRlZiBpcDZ0
-YWJsZXMoKmFyZ3MsICoqb3B0aW9ucyk6CiAgICAiIiIKICAgIFJ1biBpcHRhYmxlczYgd2l0aCBj
-aGVja3MuCiAgICAiIiIKICAgIHJ1bl9pcHRhYmxlX3dpdGhfY2hlY2soSVA2VEFCTEVTLCAqYXJn
-cywgKipvcHRpb25zKQoKIwojIE5PVEU6IHRoZXNlIHRlc3RzIHRvIHNlZSBpZiBhIGNoYWluIGV4
-aXN0cyBtaWdodCBpbmNvcnJlY3RseSByZXR1cm4gZmFsc2UuCiMgVGhpcyBoYXBwZW5zIHdoZW4g
-dGhlcmUgaXMgYW4gZXJyb3IgaW4gY2FsbGluZyBgaXB0YWJsZXMgLS1saXN0IGJpdG1hc2tgLgoj
-CiMgRm9yIHRoaXMgcmVhc29uLCB3aGVuIHN0b3BwaW5nIHRoZSBmaXJld2FsbCwgd2UgZG8gbm90
-IHRydXN0IHRoZQojIG91dHB1dCBvZiBpcHZ4X2NoYWluX2V4aXN0cygpIGJ1dCBpbnN0ZWFkIGFs
-d2F5cyBhdHRlbXB0IHRvIGRlbGV0ZQojIHRoZSBjaGFpbi4KIwoKCmRlZiBpcHY0X2NoYWluX2V4
-aXN0cyhjaGFpbiwgdGFibGU9Tm9uZSk6CiAgICAiIiIKICAgIENoZWNrIGlmIGEgZ2l2ZW4gY2hh
-aW4gZXhpc3RzLiBPbmx5IHJldHVybnMgdHJ1ZSBpZiBpdCBhY3R1YWxseSBleGlzdHMsCiAgICBi
-dXQgbWlnaHQgcmV0dXJuIGZhbHNlIGlmIGl0IGV4aXN0cyBhbmQgaXB0YWJsZXMgZmFpbGVkIHRv
-IHJ1bi4KCiAgICA6cGFyYW0gY2hhaW46IHRoZSBjaGFpbiB0byBjaGVjayBhZ2FpbnN0CiAgICA6
-dHlwZSBjaGFpbjogc3RyCiAgICA6cnR5cGU6IGJvb2wKICAgICIiIgogICAgaWYgdGFibGUgaXMg
-bm90IE5vbmU6CiAgICAgICAgY29kZSA9IHJ1bihJUFRBQkxFUywgIi10IiwgdGFibGUsCiAgICAg
-ICAgICAgICAgICAgICAiLS1saXN0IiwgY2hhaW4sICItLW51bWVyaWMiLCBleGl0Y29kZT1UcnVl
-KQogICAgZWxzZToKICAgICAgICBjb2RlID0gcnVuKElQVEFCTEVTLCAiLS1saXN0IiwgY2hhaW4s
-ICItLW51bWVyaWMiLCBleGl0Y29kZT1UcnVlKQogICAgaWYgY29kZSA9PSAwOgogICAgICAgIHJl
-dHVybiBUcnVlCiAgICBlbGlmIGNvZGUgPT0gMToKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVs
-c2U6CiAgICAgICAgbG9nKCJFUlJPUjogQ291bGQgbm90IGRldGVybWluZSBzdGF0ZSBvZiBpcHRh
-YmxlIGNoYWluIikKICAgICAgICByZXR1cm4gRmFsc2UKCgpkZWYgaXB2Nl9jaGFpbl9leGlzdHMo
-Y2hhaW4pOgogICAgIiIiCiAgICBzZWUgaXB2NF9jaGFpbl9leGlzdHMoKQoKICAgIDpwYXJhbSBj
-aGFpbjogdGhlIGNoYWluIHRvIGNoZWNrIGFnYWluc3QKICAgIDp0eXBlIGNoYWluOiBzdHIKICAg
-IDpydHlwZTogYm9vbAogICAgIiIiCiAgICBjb2RlID0gcnVuKElQNlRBQkxFUywgIi0tbGlzdCIs
-IGNoYWluLCAiLS1udW1lcmljIiwgZXhpdGNvZGU9VHJ1ZSkKICAgIGlmIGNvZGUgPT0gMDoKICAg
-ICAgICByZXR1cm4gVHJ1ZQogICAgZWxpZiBjb2RlID09IDE6CiAgICAgICAgcmV0dXJuIEZhbHNl
-CiAgICBlbHNlOgogICAgICAgIGxvZygiRVJST1I6IENvdWxkIG5vdCBkZXRlcm1pbmUgc3RhdGUg
-b2YgaXB0YWJsZSBjaGFpbiIpCiAgICAgICAgcmV0dXJuIEZhbHNlCgoKZGVmIGVuYWJsZV9pcF9m
-b3J3YXJkaW5nKCk6CiAgICAiIiIKICAgIGlwX2Zvd2FyZGluZyBtdXN0IGJlIGVuYWJsZWQgZm9y
-IHRoZSBmaXJld2FsbCB0byB3b3JrLgogICAgIiIiCiAgICB3aXRoIG9wZW4oJy9wcm9jL3N5cy9u
-ZXQvaXB2NC9pcF9mb3J3YXJkJywgJ3cnKSBhcyBmOgogICAgICAgIGYud3JpdGUoJzFcbicpCgoK
-ZGVmIGZpcmV3YWxsX3N0YXJ0KGFyZ3MpOgogICAgIiIiCiAgICBCcmluZyB1cCB0aGUgZmlyZXdh
-bGwuCgogICAgOnBhcmFtIGFyZ3M6IGxpc3Qgb2YgZ2F0ZXdheXMsIHRvIGJlIHNhbml0aXplZC4K
-ICAgIDp0eXBlIGFyZ3M6IGxpc3QKICAgICIiIgogICAgZGVmYXVsdF9kZXZpY2UgPSBnZXRfZGVm
-YXVsdF9kZXZpY2UoKQogICAgbG9jYWxfbmV0d29ya19pcHY0ID0gZ2V0X2xvY2FsX25ldHdvcmtf
-aXB2NChkZWZhdWx0X2RldmljZSkKICAgIGxvY2FsX25ldHdvcmtfaXB2NiA9IGdldF9sb2NhbF9u
-ZXR3b3JrX2lwdjYoZGVmYXVsdF9kZXZpY2UpCiAgICBnYXRld2F5cyA9IGdldF9nYXRld2F5cyhh
-cmdzKQoKICAgICMgYWRkIGN1c3RvbSBjaGFpbiAiYml0bWFzayIgdG8gZnJvbnQgb2YgT1VUUFVU
-IGNoYWluIGZvciBib3RoCiAgICAjIHRoZSAnZmlsdGVyJyBhbmQgdGhlICduYXQnIHRhYmxlcy4K
-ICAgIGlmIG5vdCBpcHY0X2NoYWluX2V4aXN0cyhCSVRNQVNLX0NIQUlOKToKICAgICAgICBpcDR0
-YWJsZXMoIi0tbmV3LWNoYWluIiwgQklUTUFTS19DSEFJTikKICAgIGlmIG5vdCBpcHY0X2NoYWlu
-X2V4aXN0cyhCSVRNQVNLX0NIQUlOX05BVF9PVVQsICduYXQnKToKICAgICAgICBpcDR0YWJsZXMo
-Ii0tdGFibGUiLCAibmF0IiwgIi0tbmV3LWNoYWluIiwgQklUTUFTS19DSEFJTl9OQVRfT1VUKQog
-ICAgaWYgbm90IGlwdjRfY2hhaW5fZXhpc3RzKEJJVE1BU0tfQ0hBSU5fTkFUX1BPU1QsICduYXQn
-KToKICAgICAgICBpcDR0YWJsZXMoIi0tdGFibGUiLCAibmF0IiwgIi0tbmV3LWNoYWluIiwgQklU
-TUFTS19DSEFJTl9OQVRfUE9TVCkKICAgIGlmIG5vdCBpcHY2X2NoYWluX2V4aXN0cyhCSVRNQVNL
-X0NIQUlOKToKICAgICAgICBpcDZ0YWJsZXMoIi0tbmV3LWNoYWluIiwgQklUTUFTS19DSEFJTikK
-ICAgIGlwNHRhYmxlcygiLS10YWJsZSIsICJuYXQiLCAiLS1pbnNlcnQiLCAiT1VUUFVUIiwKICAg
-ICAgICAgICAgICAiLS1qdW1wIiwgQklUTUFTS19DSEFJTl9OQVRfT1VUKQogICAgaXA0dGFibGVz
-KCItLXRhYmxlIiwgIm5hdCIsICItLWluc2VydCIsICJQT1NUUk9VVElORyIsCiAgICAgICAgICAg
-ICAgIi0tanVtcCIsIEJJVE1BU0tfQ0hBSU5fTkFUX1BPU1QpCiAgICBpcHRhYmxlcygiLS1pbnNl
-cnQiLCAiT1VUUFVUIiwgIi0tanVtcCIsIEJJVE1BU0tfQ0hBSU4pCgogICAgIyByb3V0ZSBhbGwg
-aXB2NCBETlMgb3ZlciBWUE4KICAgICMgKG5vdGU6IE5BVCBkb2VzIG5vdCB3b3JrIHdpdGggaXB2
-NiB1bnRpbCBrZXJuZWwgMy43KQogICAgZW5hYmxlX2lwX2ZvcndhcmRpbmcoKQogICAgaWYgUVVC
-RVNfUFJPWFkgYW5kIFFVQkVTX1ZFUiA+PSAzOgogICAgICAgICMgcmV3cml0ZSBETlMgcGFja2V0
-cyBmb3IgVlBOIEROUzsgUXViZXMgcHJlY29uZmlndXJlcyBtYXNxdWVyYWRlCiAgICAgICAgaXA0
-dGFibGVzKCItdCIsICJuYXQiLCAiLS1mbHVzaCIsICJQUi1RQlMiKQogICAgICAgIGlwNHRhYmxl
-cygiLXQiLCAibmF0IiwgIi0tYXBwZW5kIiwgIlBSLVFCUyIsICItcCIsICJ1ZHAiLAogICAgICAg
-ICAgICAgICAgICAiLS1kcG9ydCIsICI1MyIsICItLWp1bXAiLCAiRE5BVCIsICItLXRvIiwgTkFN
-RVNFUlZFUisiOjUzIikKICAgICAgICBpcDR0YWJsZXMoIi10IiwgIm5hdCIsICItLWFwcGVuZCIs
-ICJQUi1RQlMiLCAiLXAiLCAidGNwIiwKICAgICAgICAgICAgICAgICAgIi0tZHBvcnQiLCAiNTMi
-LCAiLS1qdW1wIiwgIkROQVQiLCAiLS10byIsIE5BTUVTRVJWRVIrIjo1MyIpCiAgICBlbHNlOgog
-ICAgICAgICMgYWxsb3cgZG5zIHRvIGxvY2FsaG9zdAogICAgICAgIGlwNHRhYmxlcygiLXQiLCAi
-bmF0IiwgIi0tYXBwZW5kIiwgQklUTUFTS19DSEFJTiwgIi0tcHJvdG9jb2wiLCAidWRwIiwKICAg
-ICAgICAgICAgICAgICAgIi0tZGVzdCIsICIxMjcuMC4xLjEsMTI3LjAuMC4xLDEyNy4wLjAuNTMi
-LCAiLS1kcG9ydCIsICI1MyIsCiAgICAgICAgICAgICAgICAgICItLWp1bXAiLCAiQUNDRVBUIikK
-ICAgICAgICAjIHJld3JpdGUgYWxsIG91dGdvaW5nIHBhY2tldHMgdG8gdXNlIFZQTiBETlMgc2Vy
-dmVyCiAgICAgICAgIyAoRE5TIGRvZXMgc29tZXRpbWVzIHVzZSBUQ1AhKQogICAgICAgIGlwNHRh
-YmxlcygiLXQiLCAibmF0IiwgIi0tYXBwZW5kIiwgQklUTUFTS19DSEFJTl9OQVRfT1VULCAiLXAi
-LCAidWRwIiwKICAgICAgICAgICAgICAgICAgIi0tZHBvcnQiLCAiNTMiLCAiLS1qdW1wIiwgIkRO
-QVQiLCAiLS10byIsIE5BTUVTRVJWRVIrIjo1MyIpCiAgICAgICAgaXA0dGFibGVzKCItdCIsICJu
-YXQiLCAiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOX05BVF9PVVQsICItcCIsICJ0Y3AiLAogICAg
-ICAgICAgICAgICAgICAiLS1kcG9ydCIsICI1MyIsICItLWp1bXAiLCAiRE5BVCIsICItLXRvIiwg
-TkFNRVNFUlZFUisiOjUzIikKICAgICAgICAjIGVuYWJsZSBtYXNxdWVyYWRpbmcsIHNvIHRoYXQg
-RE5TIHBhY2tldHMgcmV3cml0dGVuIGJ5IEROQVQgd2lsbAogICAgICAgICMgaGF2ZSB0aGUgY29y
-cmVjdCBzb3VyY2UgSVBzLiBBcHBseSBtYXNxdWVyYWRlIG9ubHkgdG8gdGhlIE5BTUVTRVJWRVIs
-CiAgICAgICAgIyB3ZSBkb24ndCB3YW50IHRvIGFwcGx5IGl0IHRvIHRoZSBsb2NhbGhvc3QgZG5z
-IHJlc29sdmVyLgogICAgICAgIGlwNHRhYmxlcygiLXQiLCAibmF0IiwgIi0tYXBwZW5kIiwgQklU
-TUFTS19DSEFJTl9OQVRfUE9TVCwKICAgICAgICAgICAgICAgICAgIi0tZGVzdCIsIE5BTUVTRVJW
-RVIsCiAgICAgICAgICAgICAgICAgICItLXByb3RvY29sIiwgInVkcCIsICItLWRwb3J0IiwgIjUz
-IiwgIi0tanVtcCIsICJNQVNRVUVSQURFIikKICAgICAgICBpcDR0YWJsZXMoIi10IiwgIm5hdCIs
-ICItLWFwcGVuZCIsIEJJVE1BU0tfQ0hBSU5fTkFUX1BPU1QsCiAgICAgICAgICAgICAgICAgICIt
-LWRlc3QiLCBOQU1FU0VSVkVSLAogICAgICAgICAgICAgICAgICAiLS1wcm90b2NvbCIsICJ0Y3Ai
-LCAiLS1kcG9ydCIsICI1MyIsICItLWp1bXAiLCAiTUFTUVVFUkFERSIpCgogICAgIyBhbGxvdyBs
-b2NhbCBuZXR3b3JrIHRyYWZmaWMKICAgIGlmIGxvY2FsX25ldHdvcmtfaXB2NDoKICAgICAgICAj
-IGFsbG93IGxvY2FsIG5ldHdvcmsgZGVzdGluYXRpb25zCiAgICAgICAgaXA0dGFibGVzKCItLWFw
-cGVuZCIsIEJJVE1BU0tfQ0hBSU4sCiAgICAgICAgICAgICAgICAgICItLWRlc3RpbmF0aW9uIiwg
-bG9jYWxfbmV0d29ya19pcHY0LCAiLW8iLCBkZWZhdWx0X2RldmljZSwKICAgICAgICAgICAgICAg
-ICAgIi0tanVtcCIsICJBQ0NFUFQiKQogICAgICAgICMgYWxsb3cgbG9jYWwgbmV0d29yayBzb3Vy
-Y2VzIGZvciBETlMKICAgICAgICAjIChyZXF1aXJlZCB0byBhbGxvdyBsb2NhbCBuZXR3b3JrIERO
-UyB0aGF0IGdldHMgcmV3cml0dGVuIGJ5IE5BVAogICAgICAgICMgIHRvIGdldCBwYXNzZWQgdGhy
-b3VnaCBzbyB0aGF0IE1BU1FVRVJBREUgY2FuIHNldCBjb3JyZWN0IHNvdXJjZSBJUCkKICAgICAg
-ICBpcDR0YWJsZXMoIi0tYXBwZW5kIiwgQklUTUFTS19DSEFJTiwKICAgICAgICAgICAgICAgICAg
-Ii0tc291cmNlIiwgbG9jYWxfbmV0d29ya19pcHY0LCAiLW8iLCBkZWZhdWx0X2RldmljZSwKICAg
-ICAgICAgICAgICAgICAgIi1wIiwgInVkcCIsICItLWRwb3J0IiwgIjUzIiwgIi0tanVtcCIsICJB
-Q0NFUFQiKQogICAgICAgIGlwNHRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOLAogICAg
-ICAgICAgICAgICAgICAiLS1zb3VyY2UiLCBsb2NhbF9uZXR3b3JrX2lwdjQsICItbyIsIGRlZmF1
-bHRfZGV2aWNlLAogICAgICAgICAgICAgICAgICAiLXAiLCAidGNwIiwgIi0tZHBvcnQiLCAiNTMi
-LCAiLS1qdW1wIiwgIkFDQ0VQVCIpCiAgICAgICAgIyBhbGxvdyBtdWx0aWNhc3QgU2ltcGxlIFNl
-cnZpY2UgRGlzY292ZXJ5IFByb3RvY29sCiAgICAgICAgaXA0dGFibGVzKCItLWFwcGVuZCIsIEJJ
-VE1BU0tfQ0hBSU4sCiAgICAgICAgICAgICAgICAgICItLXByb3RvY29sIiwgInVkcCIsCiAgICAg
-ICAgICAgICAgICAgICItLWRlc3RpbmF0aW9uIiwgIjIzOS4yNTUuMjU1LjI1MCIsICItLWRwb3J0
-IiwgIjE5MDAiLAogICAgICAgICAgICAgICAgICAiLW8iLCBkZWZhdWx0X2RldmljZSwgIi0tanVt
-cCIsICJSRVRVUk4iKQogICAgICAgICMgYWxsb3cgbXVsdGljYXN0IEJvbmpvdXIvbUROUwogICAg
-ICAgIGlwNHRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOLAogICAgICAgICAgICAgICAg
-ICAiLS1wcm90b2NvbCIsICJ1ZHAiLAogICAgICAgICAgICAgICAgICAiLS1kZXN0aW5hdGlvbiIs
-ICIyMjQuMC4wLjI1MSIsICItLWRwb3J0IiwgIjUzNTMiLAogICAgICAgICAgICAgICAgICAiLW8i
-LCBkZWZhdWx0X2RldmljZSwgIi0tanVtcCIsICJSRVRVUk4iKQogICAgaWYgbG9jYWxfbmV0d29y
-a19pcHY2OgogICAgICAgIGlwNnRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOLAogICAg
-ICAgICAgICAgICAgICAiLS1kZXN0aW5hdGlvbiIsIGxvY2FsX25ldHdvcmtfaXB2NiwgIi1vIiwg
-ZGVmYXVsdF9kZXZpY2UsCiAgICAgICAgICAgICAgICAgICItLWp1bXAiLCAiQUNDRVBUIikKICAg
-ICAgICAjIGFsbG93IG11bHRpY2FzdCBTaW1wbGUgU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wK
-ICAgICAgICBpcDZ0YWJsZXMoIi0tYXBwZW5kIiwgQklUTUFTS19DSEFJTiwKICAgICAgICAgICAg
-ICAgICAgIi0tcHJvdG9jb2wiLCAidWRwIiwKICAgICAgICAgICAgICAgICAgIi0tZGVzdGluYXRp
-b24iLCAiRkYwNTo6QyIsICItLWRwb3J0IiwgIjE5MDAiLAogICAgICAgICAgICAgICAgICAiLW8i
-LCBkZWZhdWx0X2RldmljZSwgIi0tanVtcCIsICJSRVRVUk4iKQogICAgICAgICMgYWxsb3cgbXVs
-dGljYXN0IEJvbmpvdXIvbUROUwogICAgICAgIGlwNnRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNL
-X0NIQUlOLAogICAgICAgICAgICAgICAgICAiLS1wcm90b2NvbCIsICJ1ZHAiLAogICAgICAgICAg
-ICAgICAgICAiLS1kZXN0aW5hdGlvbiIsICJGRjAyOjpGQiIsICItLWRwb3J0IiwgIjUzNTMiLAog
-ICAgICAgICAgICAgICAgICAiLW8iLCBkZWZhdWx0X2RldmljZSwgIi0tanVtcCIsICJSRVRVUk4i
-KQoKICAgICMgYWxsb3cgaXB2NCB0cmFmZmljIHRvIGdhdGV3YXlzCiAgICBmb3IgZ2F0ZXdheSBp
-biBnYXRld2F5czoKICAgICAgICBpcDR0YWJsZXMoIi0tYXBwZW5kIiwgQklUTUFTS19DSEFJTiwg
-Ii0tZGVzdGluYXRpb24iLCBnYXRld2F5LAogICAgICAgICAgICAgICAgICAiLW8iLCBkZWZhdWx0
-X2RldmljZSwgIi0tanVtcCIsICJBQ0NFUFQiKQoKICAgICMgbG9nIHJlamVjdGVkIHBhY2tldHMg
-dG8gc3lzbG9nCiAgICBpZiBERUJVRzoKICAgICAgICBpcHRhYmxlcygiLS1hcHBlbmQiLCBCSVRN
-QVNLX0NIQUlOLCAiLW8iLCBkZWZhdWx0X2RldmljZSwKICAgICAgICAgICAgICAgICAiLS1qdW1w
-IiwgIkxPRyIsICItLWxvZy1wcmVmaXgiLCAiaXB0YWJsZXMgZGVuaWVkOiAiLAogICAgICAgICAg
-ICAgICAgICItLWxvZy1sZXZlbCIsICI3IikKCiAgICAjIGZvciBub3csIGVuc3VyZSBhbGwgb3Ro
-ZXIgaXB2NiBwYWNrZXRzIGdldCByZWplY3RlZCAocmVnYXJkbGVzcyBvZgogICAgIyBkZXZpY2Up
-LiBub3Qgc3VyZSB3aHksIGJ1dCAiLXAgYW55IiBkb2Vzbid0IHdvcmsuCiAgICBpcDZ0YWJsZXMo
-Ii0tYXBwZW5kIiwgQklUTUFTS19DSEFJTiwgIi1wIiwgInRjcCIsICItLWp1bXAiLCAiUkVKRUNU
-IikKICAgIGlwNnRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOLCAiLXAiLCAidWRwIiwg
-Ii0tanVtcCIsICJSRUpFQ1QiKQoKICAgICMgcmVqZWN0IGFsbCBvdGhlciBpcHY0IHNlbnQgb3Zl
-ciB0aGUgZGVmYXVsdCBkZXZpY2UKICAgIGlwNHRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NI
-QUlOLCAiLW8iLAogICAgICAgICAgICAgIGRlZmF1bHRfZGV2aWNlLCAiLS1qdW1wIiwgIlJFSkVD
-VCIpCgogICAgIyBPbiBRdWJlcyBPUywgYWRkIGFudGktbGVhayBydWxlcyBmb3IgcHJveHlWTSBx
-dWJlcy1maXJld2FsbC5zZXJ2aWNlCiAgICAjIE11c3Qgc3RheSBvbiAndG9wJyBvZiBjaGFpbiEK
-ICAgIGlmIFFVQkVTX1BST1hZIGFuZCBRVUJFU19WRVIgPj0gMyBhbmQgcnVuKCJncmVwIiwgXAog
-ICAgICAgICJpbnN0YWxsZWRcIGJ5XCAiICsgU0NSSVBULCBRVUJFU19GV19TQ1JJUFQsIGV4aXRj
-b2RlPVRydWUpICE9IDA6CiAgICAgICAgd2l0aCBvcGVuKFFVQkVTX0ZXX1NDUklQVCwgbW9kZT0i
-dyIpIGFzIHFmaWxlOgogICAgICAgICAgICBxZmlsZS53cml0ZSgiIyEvYmluL3NoXG4iKQogICAg
-ICAgICAgICBxZmlsZS53cml0ZSgiIyBBbnRpLWxlYWsgcnVsZXMgaW5zdGFsbGVkIGJ5ICIgKyBT
-Q1JJUFQgKyAiICIgXAogICAgICAgICAgICArIFZFUlNJT04gKyAiXG4iKQogICAgICAgICAgICBx
-ZmlsZS53cml0ZSgiaXB0YWJsZXMgLS1pbnNlcnQgRk9SV0FSRCAtaSBldGgwIC1qIERST1BcbiIp
-CiAgICAgICAgICAgIHFmaWxlLndyaXRlKCJpcHRhYmxlcyAtLWluc2VydCBGT1JXQVJEIC1vIGV0
-aDAgLWogRFJPUFxuIikKICAgICAgICAgICAgcWZpbGUud3JpdGUoImlwNnRhYmxlcyAtLWluc2Vy
-dCBGT1JXQVJEIC1pIGV0aDAgLWogRFJPUFxuIikKICAgICAgICAgICAgcWZpbGUud3JpdGUoImlw
-NnRhYmxlcyAtLWluc2VydCBGT1JXQVJEIC1vIGV0aDAgLWogRFJPUFxuIikKICAgICAgICAgICAg
-cWZpbGUud3JpdGUoImlwdGFibGVzIC0taW5zZXJ0IElOUFVUIC1pIHR1bisgLWogRFJPUFxuIikK
-ICAgICAgICAgICAgcWZpbGUud3JpdGUoImlwNnRhYmxlcyAtLWluc2VydCBJTlBVVCAtaSB0dW4r
-IC1qIERST1BcbiIpCiAgICAgICAgb3MuY2htb2QoUVVCRVNfRldfU0NSSVBULCBzdGF0LlNfSVJX
-WFUpCiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKFFVQkVTX0lQSE9PSyk6CiAgICAgICAg
-ICAgIG9zLnN5bWxpbmsoUVVCRVNfRldfU0NSSVBULCBRVUJFU19JUEhPT0spCiAgICAgICAgaWYg
-UVVCRVNfVkVSID09IDQ6CiAgICAgICAgICAgIHJ1bihRVUJFU19GV19TQ1JJUFQpCiAgICAgICAg
-ZWxpZiBRVUJFU19WRVIgPT0gMzoKICAgICAgICAgICAgcnVuKCJzeXN0ZW1jdGwiLCAicmVzdGFy
-dCIsICJxdWJlcy1maXJld2FsbC5zZXJ2aWNlIikKCgpkZWYgZmlyZXdhbGxfc3RvcCgpOgogICAg
-IiIiCiAgICBTdG9wIHRoZSBmaXJld2FsbC4gQmVjYXVzZSB3ZSByZWFsbHkgcmVhbGx5IGFsd2F5
-cyB3YW50IHRoZSBmaXJld2FsbCB0bwogICAgYmUgc3RvcHBlZCBpZiBhdCBhbGwgcG9zc2libGUs
-IHRoaXMgZnVuY3Rpb24gaXMgY2F1dGlvdXMgYW5kIGNvbnRhaW5zIGEKICAgIGxvdCBvZiB0cnlz
-IGFuZCBleGNlcHRzLgoKICAgIElmIHRoZXJlIHdlcmUgYW55IHByb2JsZW1zLCB3ZSByYWlzZSBh
-biBleGNlcHRpb24gYXQgdGhlIGVuZC4gVGhpcyBhbGxvd3MKICAgIHRoZSBjYWxsaW5nIGNvZGUg
-dG8gcmV0cnkgc3RvcHBpbmcgdGhlIGZpcmV3YWxsLiBTdG9wcGluZyB0aGUgZmlyZXdhbGwKICAg
-IGNhbiBmYWlsIGlmIGlwdGFibGVzIGlzIGJlaW5nIHJ1biBieSBhbm90aGVyIHByb2Nlc3MgKG9u
-bHkgb25lIGlwdGFibGVzCiAgICBjb21tYW5kIGNhbiBiZSBydW4gYXQgYSB0aW1lKS4KICAgICIi
-IgogICAgb2sgPSBUcnVlCgogICAgIyAtdCBmaWx0ZXIgLUQgT1VUUFVUIC1qIGJpdG1hc2sKICAg
-IHRyeToKICAgICAgICBpcHRhYmxlcygiLS1kZWxldGUiLCAiT1VUUFVUIiwgIi0tanVtcCIsIEJJ
-VE1BU0tfQ0hBSU4sIHRocm93PVRydWUpCiAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9j
-ZXNzRXJyb3IgYXMgZXhjOgogICAgICAgIGRlYnVnKCJJTkZPOiBub3QgYWJsZSB0byByZW1vdmUg
-Yml0bWFzayBmaXJld2FsbCBmcm9tIE9VVFBVVCBjaGFpbiAiCiAgICAgICAgICAgICAgIihtYXli
-ZSBpdCBpcyBhbHJlYWR5IHJlbW92ZWQ/KSIsIGV4YykKICAgICAgICBvayA9IEZhbHNlCgogICAg
-IyAtdCBuYXQgLUQgT1VUUFVUIC1qIGJpdG1hc2sKICAgIHRyeToKICAgICAgICBpcDR0YWJsZXMo
-Ii10IiwgIm5hdCIsICItLWRlbGV0ZSIsICJPVVRQVVQiLAogICAgICAgICAgICAgICAgICAiLS1q
-dW1wIiwgQklUTUFTS19DSEFJTl9OQVRfT1VULCB0aHJvdz1UcnVlKQogICAgZXhjZXB0IHN1YnBy
-b2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKICAgICAgICBkZWJ1ZygiSU5GTzogbm90
-IGFibGUgdG8gcmVtb3ZlIGJpdG1hc2sgZmlyZXdhbGwgZnJvbSBPVVRQVVQgY2hhaW4gIgogICAg
-ICAgICAgICAgICJpbiAnbmF0JyB0YWJsZSAobWF5YmUgaXQgaXMgYWxyZWFkeSByZW1vdmVkPyki
-LCBleGMpCiAgICAgICAgb2sgPSBGYWxzZQoKICAgICMgLXQgbmF0IC1EIFBPU1RST1VUSU5HIC1q
-IGJpdG1hc2tfcG9zdHJvdXRpbmcKICAgIHRyeToKICAgICAgICBpcDR0YWJsZXMoIi10IiwgIm5h
-dCIsICItLWRlbGV0ZSIsICJQT1NUUk9VVElORyIsCiAgICAgICAgICAgICAgICAgICItLWp1bXAi
-LCBCSVRNQVNLX0NIQUlOX05BVF9QT1NULCB0aHJvdz1UcnVlKQogICAgZXhjZXB0IHN1YnByb2Nl
-c3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKICAgICAgICBkZWJ1ZygiSU5GTzogbm90IGFi
-bGUgdG8gcmVtb3ZlIGJpdG1hc2sgZmlyZXdhbGwgZnJvbSBQT1NUUk9VVElORyAiCiAgICAgICAg
-ICAgICAgImNoYWluIGluICduYXQnIHRhYmxlIChtYXliZSBpdCBpcyBhbHJlYWR5IHJlbW92ZWQ/
-KSIsIGV4YykKICAgICAgICBvayA9IEZhbHNlCgogICAgIyAtdCBmaWx0ZXIgLS1kZWxldGUtY2hh
-aW4gYml0bWFzawogICAgdHJ5OgogICAgICAgIGlwNHRhYmxlcygiLS1mbHVzaCIsIEJJVE1BU0tf
-Q0hBSU4sIHRocm93PVRydWUpCiAgICAgICAgaXA0dGFibGVzKCItLWRlbGV0ZS1jaGFpbiIsIEJJ
-VE1BU0tfQ0hBSU4sIHRocm93PVRydWUpCiAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9j
-ZXNzRXJyb3IgYXMgZXhjOgogICAgICAgIGRlYnVnKCJJTkZPOiBub3QgYWJsZSB0byBmbHVzaCBh
-bmQgZGVsZXRlIGJpdG1hc2sgaXB2NCBmaXJld2FsbCAiCiAgICAgICAgICAgICAgImNoYWluICht
-YXliZSBpdCBpcyBhbHJlYWR5IGRlc3Ryb3llZD8pIiwgZXhjKQogICAgICAgIG9rID0gRmFsc2UK
-CiAgICAjIC10IG5hdCAtLWRlbGV0ZS1jaGFpbiBiaXRtYXNrCiAgICB0cnk6CiAgICAgICAgaXA0
-dGFibGVzKCItdCIsICJuYXQiLCAiLS1mbHVzaCIsIEJJVE1BU0tfQ0hBSU5fTkFUX09VVCwgdGhy
-b3c9VHJ1ZSkKICAgICAgICBpcDR0YWJsZXMoIi10IiwgIm5hdCIsICItLWRlbGV0ZS1jaGFpbiIs
-CiAgICAgICAgICAgICAgICAgIEJJVE1BU0tfQ0hBSU5fTkFUX09VVCwgdGhyb3c9VHJ1ZSkKICAg
-IGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CiAgICAgICAgZGVi
-dWcoIklORk86IG5vdCBhYmxlIHRvIGZsdXNoIGFuZCBkZWxldGUgYml0bWFzayBpcHY0IGZpcmV3
-YWxsICIKICAgICAgICAgICAgICAiY2hhaW4gaW4gJ25hdCcgdGFibGUgKG1heWJlIGl0IGlzIGFs
-cmVhZHkgZGVzdHJveWVkPykiLCBleGMpCiAgICAgICAgb2sgPSBGYWxzZQoKICAgICMgLXQgbmF0
-IC0tZGVsZXRlLWNoYWluIGJpdG1hc2tfcG9zdHJvdXRpbmcKICAgIHRyeToKICAgICAgICBpcDR0
-YWJsZXMoIi10IiwgIm5hdCIsICItLWZsdXNoIiwgQklUTUFTS19DSEFJTl9OQVRfUE9TVCwgdGhy
-b3c9VHJ1ZSkKICAgICAgICBpcDR0YWJsZXMoIi10IiwgIm5hdCIsICItLWRlbGV0ZS1jaGFpbiIs
-CiAgICAgICAgICAgICAgICAgIEJJVE1BU0tfQ0hBSU5fTkFUX1BPU1QsIHRocm93PVRydWUpCiAg
-ICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgogICAgICAgIGRl
-YnVnKCJJTkZPOiBub3QgYWJsZSB0byBmbHVzaCBhbmQgZGVsZXRlIGJpdG1hc2sgaXB2NCBmaXJl
-d2FsbCAiCiAgICAgICAgICAgICAgImNoYWluIGluICduYXQnIHRhYmxlIChtYXliZSBpdCBpcyBh
-bHJlYWR5IGRlc3Ryb3llZD8pIiwgZXhjKQogICAgICAgIG9rID0gRmFsc2UKCiAgICAjIC10IGZp
-bHRlciAtLWRlbGV0ZS1jaGFpbiBiaXRtYXNrIChpcHY2KQogICAgdHJ5OgogICAgICAgIGlwNnRh
-YmxlcygiLS1mbHVzaCIsIEJJVE1BU0tfQ0hBSU4sIHRocm93PVRydWUpCiAgICAgICAgaXA2dGFi
-bGVzKCItLWRlbGV0ZS1jaGFpbiIsIEJJVE1BU0tfQ0hBSU4sIHRocm93PVRydWUpCiAgICBleGNl
-cHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgogICAgICAgIGRlYnVnKCJJ
-TkZPOiBub3QgYWJsZSB0byBmbHVzaCBhbmQgZGVsZXRlIGJpdG1hc2sgaXB2NiBmaXJld2FsbCAi
-CiAgICAgICAgICAgICAgImNoYWluIChtYXliZSBpdCBpcyBhbHJlYWR5IGRlc3Ryb3llZD8pIiwg
-ZXhjKQogICAgICAgIG9rID0gRmFsc2UKCiAgICBpZiBub3QgKG9rIG9yIGlwdjRfY2hhaW5fZXhp
-c3RzIG9yIGlwdjZfY2hhaW5fZXhpc3RzKToKICAgICAgICByYWlzZSBFeGNlcHRpb24oImZpcmV3
-YWxsIG1pZ2h0IHN0aWxsIGJlIGxlZnQgdXAuICIKICAgICAgICAgICAgICAgICAgICAgICAgIlBs
-ZWFzZSB0cnkgYGZpcmV3YWxsIHN0b3BgIGFnYWluLiIpCgoKZGVmIGZ3X2VtYWlsX3N0YXJ0KGFy
-Z3MpOgogICAgIiIiCiAgICBCcmluZyB1cCB0aGUgZW1haWwgZmlyZXdhbGwuCgogICAgOnBhcmFt
-IGFyZ3M6IHRoZSB1c2VyIHVpZCBvZiB0aGUgYml0bWFzayBwcm9jZXNzCiAgICA6dHlwZSBhcmdz
-OiBsaXN0CiAgICAiIiIKICAgICMgYWRkIGN1c3RvbSBjaGFpbiAiYml0bWFza19lbWFpbCIgdG8g
-ZnJvbnQgb2YgSU5QVVQgY2hhaW4KICAgIGlmIG5vdCBpcHY0X2NoYWluX2V4aXN0cyhCSVRNQVNL
-X0NIQUlOX0VNQUlMKToKICAgICAgICBpcDR0YWJsZXMoIi0tbmV3LWNoYWluIiwgQklUTUFTS19D
-SEFJTl9FTUFJTCkKICAgIGlmIG5vdCBpcHY2X2NoYWluX2V4aXN0cyhCSVRNQVNLX0NIQUlOX0VN
-QUlMKToKICAgICAgICBpcDZ0YWJsZXMoIi0tbmV3LWNoYWluIiwgQklUTUFTS19DSEFJTl9FTUFJ
-TCkKICAgIGlwdGFibGVzKCItLWluc2VydCIsICJJTlBVVCIsICItLWp1bXAiLCBCSVRNQVNLX0NI
-QUlOX0VNQUlMKQoKICAgICMgYWRkIGN1c3RvbSBjaGFpbiAiYml0bWFza19lbWFpbF9vdXRwdXQi
-IHRvIGZyb250IG9mIE9VVFBVVCBjaGFpbgogICAgaWYgbm90IGlwdjRfY2hhaW5fZXhpc3RzKEJJ
-VE1BU0tfQ0hBSU5fRU1BSUxfT1VUKToKICAgICAgICBpcDR0YWJsZXMoIi0tbmV3LWNoYWluIiwg
-QklUTUFTS19DSEFJTl9FTUFJTF9PVVQpCiAgICBpZiBub3QgaXB2Nl9jaGFpbl9leGlzdHMoQklU
-TUFTS19DSEFJTl9FTUFJTF9PVVQpOgogICAgICAgIGlwNnRhYmxlcygiLS1uZXctY2hhaW4iLCBC
-SVRNQVNLX0NIQUlOX0VNQUlMX09VVCkKICAgIGlwdGFibGVzKCItLWluc2VydCIsICJPVVRQVVQi
-LCAiLS1qdW1wIiwgQklUTUFTS19DSEFJTl9FTUFJTF9PVVQpCgogICAgIyBEaXNhYmxlIHRoZSBh
-Y2Nlc3MgdG8gaW1hcCBhbmQgc210cCBmcm9tIG91dHNpZGUKICAgIGlwdGFibGVzKCItLWFwcGVu
-ZCIsIEJJVE1BU0tfQ0hBSU5fRU1BSUwsCiAgICAgICAgICAgICAiLS1pbi1pbnRlcmZhY2UiLCBM
-T0NBTF9JTlRFUkZBQ0UsICItLXByb3RvY29sIiwgInRjcCIsCiAgICAgICAgICAgICAiLS1kcG9y
-dCIsIElNQVBfUE9SVCwgIi0tanVtcCIsICJBQ0NFUFQiKQogICAgaXB0YWJsZXMoIi0tYXBwZW5k
-IiwgQklUTUFTS19DSEFJTl9FTUFJTCwKICAgICAgICAgICAgICItLWluLWludGVyZmFjZSIsIExP
-Q0FMX0lOVEVSRkFDRSwgIi0tcHJvdG9jb2wiLCAidGNwIiwKICAgICAgICAgICAgICItLWRwb3J0
-IiwgU01UUF9QT1JULCAiLS1qdW1wIiwgIkFDQ0VQVCIpCiAgICBpcHRhYmxlcygiLS1hcHBlbmQi
-LCBCSVRNQVNLX0NIQUlOX0VNQUlMLAogICAgICAgICAgICAgIi0tcHJvdG9jb2wiLCAidGNwIiwg
-Ii0tZHBvcnQiLCBJTUFQX1BPUlQsICItLWp1bXAiLCAiUkVKRUNUIikKICAgIGlwdGFibGVzKCIt
-LWFwcGVuZCIsIEJJVE1BU0tfQ0hBSU5fRU1BSUwsCiAgICAgICAgICAgICAiLS1wcm90b2NvbCIs
-ICJ0Y3AiLCAiLS1kcG9ydCIsIFNNVFBfUE9SVCwgIi0tanVtcCIsICJSRUpFQ1QiKQoKICAgIGlm
-IG5vdCBhcmdzIG9yIG5vdCBQQVJBTV9GT1JNQVRTWyJVSUQiXShhcmdzWzBdKToKICAgICAgICBy
-YWlzZSBFeGNlcHRpb24oIk5vIHVpZCBnaXZlbiIpCiAgICB1aWQgPSBhcmdzWzBdCgogICAgIyBP
-bmx5IHRoZSB1bml4ICd1aWQnIGhhdmUgYWNjZXNzIHRvIHRoZSBlbWFpbCBpbWFwIGFuZCBzbXRw
-IHBvcnRzCiAgICBpcHRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOX0VNQUlMX09VVCwK
-ICAgICAgICAgICAgICItLW91dC1pbnRlcmZhY2UiLCBMT0NBTF9JTlRFUkZBQ0UsCiAgICAgICAg
-ICAgICAiLS1tYXRjaCIsICJvd25lciIsICItLXVpZC1vd25lciIsIHVpZCwgIi0tcHJvdG9jb2wi
-LCAidGNwIiwKICAgICAgICAgICAgICItLWRwb3J0IiwgSU1BUF9QT1JULCAiLS1qdW1wIiwgIkFD
-Q0VQVCIpCiAgICBpcHRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOX0VNQUlMX09VVCwK
-ICAgICAgICAgICAgICItLW91dC1pbnRlcmZhY2UiLCBMT0NBTF9JTlRFUkZBQ0UsCiAgICAgICAg
-ICAgICAiLS1tYXRjaCIsICJvd25lciIsICItLXVpZC1vd25lciIsIHVpZCwgIi0tcHJvdG9jb2wi
-LCAidGNwIiwKICAgICAgICAgICAgICItLWRwb3J0IiwgU01UUF9QT1JULCAiLS1qdW1wIiwgIkFD
-Q0VQVCIpCiAgICBpcHRhYmxlcygiLS1hcHBlbmQiLCBCSVRNQVNLX0NIQUlOX0VNQUlMX09VVCwK
-ICAgICAgICAgICAgICItLW91dC1pbnRlcmZhY2UiLCBMT0NBTF9JTlRFUkZBQ0UsCiAgICAgICAg
-ICAgICAiLS1wcm90b2NvbCIsICJ0Y3AiLCAiLS1kcG9ydCIsIElNQVBfUE9SVCwgIi0tanVtcCIs
-ICJSRUpFQ1QiKQogICAgaXB0YWJsZXMoIi0tYXBwZW5kIiwgQklUTUFTS19DSEFJTl9FTUFJTF9P
-VVQsCiAgICAgICAgICAgICAiLS1vdXQtaW50ZXJmYWNlIiwgTE9DQUxfSU5URVJGQUNFLAogICAg
-ICAgICAgICAgIi0tcHJvdG9jb2wiLCAidGNwIiwgIi0tZHBvcnQiLCBTTVRQX1BPUlQsICItLWp1
-bXAiLCAiUkVKRUNUIikKCgpkZWYgZndfZW1haWxfc3RvcCgpOgogICAgIiIiCiAgICBTdG9wIHRo
-ZSBlbWFpbCBmaXJld2FsbC4KICAgICIiIgogICAgb2sgPSBUcnVlCgogICAgdHJ5OgogICAgICAg
-IGlwdGFibGVzKCItLWRlbGV0ZSIsICJJTlBVVCIsICItLWp1bXAiLCBCSVRNQVNLX0NIQUlOX0VN
-QUlMLAogICAgICAgICAgICAgICAgIHRocm93PVRydWUpCiAgICBleGNlcHQgc3VicHJvY2Vzcy5D
-YWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgogICAgICAgIGRlYnVnKCJJTkZPOiBub3QgYWJsZSB0
-byByZW1vdmUgYml0bWFzayBlbWFpbCBmaXJld2FsbCBmcm9tIElOUFVUICIKICAgICAgICAgICAg
-ICAiY2hhaW4gKG1heWJlIGl0IGlzIGFscmVhZHkgcmVtb3ZlZD8pIiwgZXhjKQogICAgICAgIG9r
-ID0gRmFsc2UKCiAgICB0cnk6CiAgICAgICAgaXB0YWJsZXMoIi0tZGVsZXRlIiwgIk9VVFBVVCIs
-ICItLWp1bXAiLCBCSVRNQVNLX0NIQUlOX0VNQUlMX09VVCwKICAgICAgICAgICAgICAgICB0aHJv
-dz1UcnVlKQogICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoK
-ICAgICAgICBkZWJ1ZygiSU5GTzogbm90IGFibGUgdG8gcmVtb3ZlIGJpdG1hc2sgZW1haWwgZmly
-ZXdhbGwgZnJvbSBPVVRQVVQgIgogICAgICAgICAgICAgICJjaGFpbiAobWF5YmUgaXQgaXMgYWxy
-ZWFkeSByZW1vdmVkPykiLCBleGMpCiAgICAgICAgb2sgPSBGYWxzZQoKICAgIHRyeToKICAgICAg
-ICBpcDR0YWJsZXMoIi0tZmx1c2giLCBCSVRNQVNLX0NIQUlOX0VNQUlMLCB0aHJvdz1UcnVlKQog
-ICAgICAgIGlwNHRhYmxlcygiLS1kZWxldGUtY2hhaW4iLCBCSVRNQVNLX0NIQUlOX0VNQUlMLCB0
-aHJvdz1UcnVlKQogICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4
-YzoKICAgICAgICBkZWJ1ZygiSU5GTzogbm90IGFibGUgdG8gZmx1c2ggYW5kIGRlbGV0ZSBiaXRt
-YXNrIGlwdjQgZW1haWwgZmlyZXdhbGwgIgogICAgICAgICAgICAgICJjaGFpbiAobWF5YmUgaXQg
-aXMgYWxyZWFkeSBkZXN0cm95ZWQ/KSIsIGV4YykKICAgICAgICBvayA9IEZhbHNlCgogICAgdHJ5
-OgogICAgICAgIGlwNnRhYmxlcygiLS1mbHVzaCIsIEJJVE1BU0tfQ0hBSU5fRU1BSUwsIHRocm93
-PVRydWUpCiAgICAgICAgaXA2dGFibGVzKCItLWRlbGV0ZS1jaGFpbiIsIEJJVE1BU0tfQ0hBSU5f
-RU1BSUwsIHRocm93PVRydWUpCiAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJy
-b3IgYXMgZXhjOgogICAgICAgIGRlYnVnKCJJTkZPOiBub3QgYWJsZSB0byBmbHVzaCBhbmQgZGVs
-ZXRlIGJpdG1hc2sgaXB2NiBlbWFpbCBmaXJld2FsbCAiCiAgICAgICAgICAgICAgImNoYWluICht
-YXliZSBpdCBpcyBhbHJlYWR5IGRlc3Ryb3llZD8pIiwgZXhjKQogICAgICAgIG9rID0gRmFsc2UK
-CiAgICB0cnk6CiAgICAgICAgaXA0dGFibGVzKCItLWZsdXNoIiwgQklUTUFTS19DSEFJTl9FTUFJ
-TF9PVVQsIHRocm93PVRydWUpCiAgICAgICAgaXA0dGFibGVzKCItLWRlbGV0ZS1jaGFpbiIsIEJJ
-VE1BU0tfQ0hBSU5fRU1BSUxfT1VULCB0aHJvdz1UcnVlKQogICAgZXhjZXB0IHN1YnByb2Nlc3Mu
-Q2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKICAgICAgICBkZWJ1ZygiSU5GTzogbm90IGFibGUg
-dG8gZmx1c2ggYW5kIGRlbGV0ZSBiaXRtYXNrIGlwdjQgZW1haWwgZmlyZXdhbGwgIgogICAgICAg
-ICAgICAgICJjaGFpbiAobWF5YmUgaXQgaXMgYWxyZWFkeSBkZXN0cm95ZWQ/KSIsIGV4YykKICAg
-ICAgICBvayA9IEZhbHNlCgogICAgdHJ5OgogICAgICAgIGlwNnRhYmxlcygiLS1mbHVzaCIsIEJJ
-VE1BU0tfQ0hBSU5fRU1BSUxfT1VULCB0aHJvdz1UcnVlKQogICAgICAgIGlwNnRhYmxlcygiLS1k
-ZWxldGUtY2hhaW4iLCBCSVRNQVNLX0NIQUlOX0VNQUlMX09VVCwgdGhyb3c9VHJ1ZSkKICAgIGV4
-Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CiAgICAgICAgZGVidWco
-IklORk86IG5vdCBhYmxlIHRvIGZsdXNoIGFuZCBkZWxldGUgYml0bWFzayBpcHY2IGVtYWlsIGZp
-cmV3YWxsICIKICAgICAgICAgICAgICAiY2hhaW4gKG1heWJlIGl0IGlzIGFscmVhZHkgZGVzdHJv
-eWVkPykiLCBleGMpCiAgICAgICAgb2sgPSBGYWxzZQoKICAgIGlmIG5vdCAob2sgb3IgaXB2NF9j
-aGFpbl9leGlzdHMgb3IgaXB2Nl9jaGFpbl9leGlzdHMpOgogICAgICAgIHJhaXNlIEV4Y2VwdGlv
-bigiZW1haWwgZmlyZXdhbGwgbWlnaHQgc3RpbGwgYmUgbGVmdCB1cC4gIgogICAgICAgICAgICAg
-ICAgICAgICAgICAiUGxlYXNlIHRyeSBgZnctZW1haWwgc3RvcGAgYWdhaW4uIikKCgojCiMgTUFJ
-TgojCgoKZGVmIG1haW4oKToKICAgICIiIgogICAgRW50cnkgcG9pbnQgZm9yIGNtZGxpbmUgZXhl
-Y3V0aW9uLgogICAgIiIiCiAgICAjIFRPRE8gdXNlIGFyZ3BhcnNlIGluc3RlYWQuCgogICAgaWYg
-bGVuKHN5cy5hcmd2KSA+PSAyOgogICAgICAgIGNvbW1hbmQgPSAiXyIuam9pbihzeXMuYXJndlsx
-OjNdKQogICAgICAgIGFyZ3MgPSBzeXMuYXJndlszOl0KCiAgICAgICAgaXNfcmVzdGFydCA9IEZh
-bHNlCiAgICAgICAgaWYgYXJncyBhbmQgYXJnc1swXSA9PSAicmVzdGFydCI6CiAgICAgICAgICAg
-IGlzX3Jlc3RhcnQgPSBUcnVlCiAgICAgICAgICAgIGFyZ3MucmVtb3ZlKCdyZXN0YXJ0JykKCiAg
-ICAgICAgaWYgY29tbWFuZCA9PSAidmVyc2lvbiI6CiAgICAgICAgICAgIHByaW50KFZFUlNJT04p
-CiAgICAgICAgICAgIGV4aXQoMCkKCiAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKICAgICAg
-ICAgICAgYmFpbCgiRVJST1I6IG11c3QgYmUgcnVuIGFzIHJvb3QiKQoKICAgICAgICBpZiBjb21t
-YW5kID09ICJvcGVudnBuX3N0YXJ0IjoKICAgICAgICAgICAgb3BlbnZwbl9zdGFydChhcmdzKQoK
-ICAgICAgICBlbGlmIGNvbW1hbmQgPT0gIm9wZW52cG5fc3RvcCI6CiAgICAgICAgICAgIG9wZW52
-cG5fc3RvcChhcmdzKQoKICAgICAgICBlbGlmIGNvbW1hbmQgPT0gImZpcmV3YWxsX3N0YXJ0IjoK
-ICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgZmlyZXdhbGxfc3RhcnQoYXJncykKICAg
-ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIGlmIG5vdCBp
-c19yZXN0YXJ0OgogICAgICAgICAgICAgICAgICAgIGZpcmV3YWxsX3N0b3AoKQogICAgICAgICAg
-ICAgICAgYmFpbCgiRVJST1I6IGNvdWxkIG5vdCBzdGFydCBmaXJld2FsbCIsIGV4KQoKICAgICAg
-ICBlbGlmIGNvbW1hbmQgPT0gImZpcmV3YWxsX3N0b3AiOgogICAgICAgICAgICB0cnk6CiAgICAg
-ICAgICAgICAgICBmaXJld2FsbF9zdG9wKCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBh
-cyBleDoKICAgICAgICAgICAgICAgIGJhaWwoIkVSUk9SOiBjb3VsZCBub3Qgc3RvcCBmaXJld2Fs
-bCIsIGV4KQoKICAgICAgICBlbGlmIGNvbW1hbmQgPT0gImZpcmV3YWxsX2lzdXAiOgogICAgICAg
-ICAgICBpZiBpcHY0X2NoYWluX2V4aXN0cyhCSVRNQVNLX0NIQUlOKToKICAgICAgICAgICAgICAg
-ICMgdG9vIHZlcmJvc2Ugc2luY2UgYml0bWFzayBwb2xscyB0aGlzCiAgICAgICAgICAgICAgICBw
-YXNzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiYWlsKCJJTkZPOiBiaXRtYXNr
-IGZpcmV3YWxsIGlzIGRvd24iKQoKICAgICAgICBlbGlmIGNvbW1hbmQgPT0gImZ3LWVtYWlsX3N0
-YXJ0IjoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgZndfZW1haWxfc3RhcnQoYXJn
-cykKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIGlm
-IG5vdCBpc19yZXN0YXJ0OgogICAgICAgICAgICAgICAgICAgIGZ3X2VtYWlsX3N0b3AoKQogICAg
-ICAgICAgICAgICAgYmFpbCgiRVJST1I6IGNvdWxkIG5vdCBzdGFydCBlbWFpbCBmaXJld2FsbCIs
-IGV4KQoKICAgICAgICBlbGlmIGNvbW1hbmQgPT0gImZ3LWVtYWlsX3N0b3AiOgogICAgICAgICAg
-ICB0cnk6CiAgICAgICAgICAgICAgICBmd19lbWFpbF9zdG9wKCkKICAgICAgICAgICAgZXhjZXB0
-IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIGJhaWwoIkVSUk9SOiBjb3VsZCBub3Qg
-c3RvcCBlbWFpbCBmaXJld2FsbCIsIGV4KQoKICAgICAgICBlbGlmIGNvbW1hbmQgPT0gImZ3LWVt
-YWlsX2lzdXAiOgogICAgICAgICAgICBpZiBpcHY0X2NoYWluX2V4aXN0cyhCSVRNQVNLX0NIQUlO
-X0VNQUlMKToKICAgICAgICAgICAgICAgIGxvZygiJXM6IElORk86IGJpdG1hc2sgZW1haWwgZmly
-ZXdhbGwgaXMgdXAiICUgKFNDUklQVCwpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
-ICAgYmFpbCgiSU5GTzogYml0bWFzayBlbWFpbCBmaXJld2FsbCBpcyBkb3duIikKCiAgICAgICAg
-ZWxzZToKICAgICAgICAgICAgYmFpbCgiRVJST1I6IE5vIHN1Y2ggY29tbWFuZCIpCiAgICBlbHNl
-OgogICAgICAgIGJhaWwoIkVSUk9SOiBObyBzdWNoIGNvbW1hbmQiKQoKCmlmIF9fbmFtZV9fID09
-ICJfX21haW5fXyI6CiAgICBkZWJ1ZygiICIuam9pbihzeXMuYXJndikpCiAgICBtYWluKCkKICAg
-IGV4aXQoMCkK
-"""
-POLKIT = """PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBvbGljeWNv
-bmZpZyBQVUJMSUMKICItLy9mcmVlZGVza3RvcC8vRFREIFBvbGljeUtpdCBQb2xpY3kgQ29uZmln
-dXJhdGlvbiAxLjAvL0VOIgogImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9Q
-b2xpY3lLaXQvMS9wb2xpY3ljb25maWcuZHRkIj4KPHBvbGljeWNvbmZpZz4KCiAgPHZlbmRvcj5M
-RUFQIFByb2plY3Q8L3ZlbmRvcj4KICA8dmVuZG9yX3VybD5odHRwOi8vbGVhcC5zZS88L3ZlbmRv
-cl91cmw+CgogIDxhY3Rpb24gaWQ9InNlLmxlYXAuYml0bWFzay5idW5kbGUucG9saWN5Ij4KICAg
-IDxkZXNjcmlwdGlvbj5SdW5zIGJpdG1hc2sgaGVscGVyIHRvIGxhdW5jaCBmaXJld2FsbCBhbmQg
-b3BlbnZwbiAoYnVuZGxlIHZlcnNpb24pPC9kZXNjcmlwdGlvbj4KICAgIDxkZXNjcmlwdGlvbiB4
-bWw6bGFuZz0iZXMiPkVqZWN1dGEgZWwgYXNpc3RlbnRlIGRlIGJpdG1hc2sgcGFyYSBsYW56YXIg
-ZWwgZmlyZXdhbGwgeSBvcGVudnBuICh2ZXJzaW9uIGJ1bmRsZSk8L2Rlc2NyaXB0aW9uPgogICAg
-PG1lc3NhZ2U+Qml0bWFzayBuZWVkcyB0aGF0IHlvdSBhdXRoZW50aWNhdGUgdG8gc3RhcnQ8L21l
-c3NhZ2U+CiAgICA8bWVzc2FnZSB4bWw6bGFuZz0iZXMiPkJpdG1hc2sgbmVjZXNpdGEgYXV0b3Jp
-emFjaW9uIHBhcmEgY29tZW56YXI8L21lc3NhZ2U+CiAgICA8aWNvbl9uYW1lPnBhY2thZ2UteC1n
-ZW5lcmljPC9pY29uX25hbWU+IAogICAgPGRlZmF1bHRzPgogICAgICA8YWxsb3dfYW55Pnllczwv
-YWxsb3dfYW55PgogICAgICA8YWxsb3dfaW5hY3RpdmU+eWVzPC9hbGxvd19pbmFjdGl2ZT4KICAg
-ICAgPGFsbG93X2FjdGl2ZT55ZXM8L2FsbG93X2FjdGl2ZT4KICAgIDwvZGVmYXVsdHM+CiAgICA8
-YW5ub3RhdGUga2V5PSJvcmcuZnJlZWRlc2t0b3AucG9saWN5a2l0LmV4ZWMucGF0aCI+L3Vzci9s
-b2NhbC9zYmluL2JpdG1hc2stcm9vdDwvYW5ub3RhdGU+CiAgPC9hY3Rpb24+CjwvcG9saWN5Y29u
-ZmlnPgo=
-"""
-BMROOT_DEST = "/usr/local/sbin/bitmask-root"
-with open(BMROOT_DEST, "w") as bmroot:
- lines = str(decode(BMROOT)).split("\n")
- for line in lines:
- bmroot.write(line + "\n")
-with open('/usr/share/polkit-1/actions/se.leap.bitmask.bundle.policy', 'w') as polkit:
- lines = str(decode(POLKIT)).split("\n")
- for line in lines:
- polkit.write(line + "\n")
-subprocess.Popen(["chmod", "+x", BMROOT_DEST])