diff --git a/pkg/deploy/assets/gateway-production.json b/pkg/deploy/assets/gateway-production.json index 7abd3528a27..3d0d826a2c9 100644 --- a/pkg/deploy/assets/gateway-production.json +++ b/pkg/deploy/assets/gateway-production.json @@ -299,7 +299,7 @@ "autoUpgradeMinorVersion": true, "settings": {}, "protectedSettings": { - "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','GATEWAYMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayMdsdConfigVersion')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayFeatures')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','MDMIMAGE=''/distroless/genevamdm:2.2024.626.1539-d1a6e7-20240715t0935@sha256:372fbc981bbfdf2b9a9d0ffdca2c51ed389b291a3bcff0401e9afb0c01605823''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('IyEvYmluL2Jhc2gKIyBJbnRlcm5hbCBGdW5jdGlvbnMgYW5kIENvbnN0YW50cwoKIyBlbXB0eV9zdHIgLSBjb25zdGFudDsgdXNlZCBieSBmdW5jdGlvbnMgZm9yIG9wdGlvbmFsIG5hbWVyZWYgc3RyaW5nIGFyZ3VlbWVudHMKIyBlbXB0eV9zdHI9IiIKIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CmRlY2xhcmUgLXIgZW1wdHlfc3RyPSIiCgojIHJvbGVfZ2F0ZXdheSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHRoaXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkgc2NyaXB0cyBzb3VyY2luZyB0aGlzIGZpbGUKIyByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9nYXRld2F5PSJnYXRld2F5IgojIHJvbGVfcnAgLSBjb25zdGFudDsgSXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggVk1TUyBpcyBiZWluZyBib290c3RyYXBwZWQKIyB0aGlzIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5IHNjcmlwdHMgc291cmNpbmcgdGhpcyBmaWxlCiMgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCiMgcm9sZV9kZXZwcm94eSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgpkZWNsYXJlIC1yIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgoKIyBsb2cgaXMgYSB3cmFwcGVyIGZvciBlY2hvIHRoYXQgaW5jbHVkZXMgdGhlIGZ1bmN0aW9uIG5hbWUKIyBBcmdzCiMgMSkgbXNnIC0gc3RyaW5nCiMgMikgc3RhY2tfbGV2ZWwgLSBpbnQ7IG9wdGlvbmFsLCBkZWZhdWx0cyB0byBjYWxsaW5nIGZ1bmN0aW9uCmxvZygpIHsKICAgIGxvY2FsIC1yIG1zZz0iJHsxOi0ibG9nIG1lc3NhZ2UgaXMgZW1wdHkifSIKICAgIGxvY2FsIC1yIHN0YWNrX2xldmVsPSIkezI6LTF9IgogICAgZWNobyAiJHtGVU5DTkFNRVske3N0YWNrX2xldmVsfV19OiAke21zZ30iCn0KCiMgYWJvcnQgaXMgYSB3cmFwcGVyIGZvciBsb2cgdGhhdCBleGl0cyB3aXRoIGFuIGVycm9yIGNvZGUKYWJvcnQoKSB7CiAgICBsb2NhbCAtcmkgb3JpZ2luX3N0YWNrbGV2ZWw9MgogICAgbG9nICIkezF9IiAiJG9yaWdpbl9zdGFja2xldmVsIgogICAgbG9nICJFeGl0aW5nIgogICAgZXhpdCAxCn0KCiMgd3JpdGVfZmlsZQojIEFyZ3MKIyAxKSBmaWxlbmFtZSAtIHN0cmluZwojIDIpIGZpbGVfY29udGVudHMgLSBzdHJpbmcKIyAzKSBjbG9iYmVyIC0gYm9vbGVhbjsgb3B0aW9uYWwgLSBkZWZhdWx0cyB0byBmYWxzZQp3cml0ZV9maWxlKCkgewogICAgbG9jYWwgLW4gZmlsZW5hbWU9IiQxIgogICAgbG9jYWwgLW4gZmlsZV9jb250ZW50cz0iJDIiCiAgICBsb2NhbCAtciBjbG9iYmVyPSIkezM6LWZhbHNlfSIKCiAgICBpZiAkY2xvYmJlcjsgdGhlbgogICAgICAgIGxvZyAiT3ZlcndyaXRpbmcgZmlsZSAkZmlsZW5hbWUiCiAgICAgICAgZWNobyAiJGZpbGVfY29udGVudHMiID4gIiRmaWxlbmFtZSIKICAgIGVsc2UKICAgICAgICBsb2cgIkFwcGVuZGluZyB0byAkZmlsZW5hbWUiCiAgICAgICAgZWNobyAiJGZpbGVfY29udGVudHMiID4+ICIkZmlsZW5hbWUiCiAgICBmaQp9CgojIHJldHJ5IEFkZGluZyByZXRyeSBsb2dpYyB0byB5dW0gY29tbWFuZHMgaW4gb3JkZXIgdG8gYXZvaWQgc3RhbGxpbmcgb3V0IG9uIHJlc291cmNlIGxvY2tzCiMgYXJnczoKIyAxKSBjbWRfcmV0cnkgLSBuYW1lcmVmLCBhcnJheTsgQ29tbWFuZCBhbmQgYXJndWVtZW50KHMpIHRvIHJldHJ5CiMgMikgd2FpdF90aW1lIC0gbmFtZXJlZiwgaW50ZWdlcjsgVGltZSB0byB3YWl0IGJlZm9yZSByZXRyeWluZyBjb21tYW5kCiMgMykgcmV0cmllcyAtIGludGVnZXIsIG9wdGlvbmFsOyBBbW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKcmV0cnkoKSB7CiAgICBsb2NhbCAtbiBjbWRfcmV0cnk9IiQxIgogICAgbG9jYWwgLW4gd2FpdF90aW1lPSIkMiIKICAgIGxvY2FsIC1yaSByZXRyaWVzPSIkezM6LTV9IgoKICAgIAogICAgZm9yIGF0dGVtcHQgaW4gJChzZXEgMSAkcmV0cmllcyk7IGRvCiAgICAgICAgbG9nICJhdHRlbXB0ICMke2F0dGVtcHR9IC0gJHtGVU5DTkFNRVsyXX0iCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICAgICAgJHtjbWRfcmV0cnlbQF19ICYKCiAgICAgICAgd2FpdCAtZiAkISAmJiByZXR1cm4gMAogICAgICAgIHNsZWVwICIkd2FpdF90aW1lIgogICAgZG9uZQoKICAgIGFib3J0ICIke2NtZF9yZXRyeVsqXX0gZmFpbGVkIGFmdGVyICMkcmV0cmllcyBhdHRlbXB0cyIKfQoKIyB2ZXJpZnlfcm9sZQojIGFyZ3M6CiMgMSkgdGVzdF9yb2xlIC0gbmFtZXJlZjsgcm9sZSBiZWluZyB2ZXJpZmllZAojIDIpIGNlcnRzIC0gYm9vbGVhbiwgb3B0aW9uYWw7IGRlZmF1bHRzIHRvIGZhbHNlLiBTZXQgdG8gdHJ1ZSB0byBhZGQgZGV2cHJveHkgdG8gYWxsb3dlZCByb2xlcwp2ZXJpZnlfcm9sZSgpIHsKICAgIGxvY2FsIC1uIHRlc3Rfcm9sZT0iJDEiCiAgICBsb2NhbCAtciBjZXJ0cz0iJHsyOi1mYWxzZX0iCgogICAgYWxsb3dlZF9yb2xlc19nbG9iPSIoJHJvbGVfcnB8JHJvbGVfZ2F0ZXdheSkiCiAgICBpZiAkY2VydHM7IHRoZW4KICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyAiKSIgYW5kIGFwcGVuZCBhZGRpdGlvbmFsIHJvbGUKICAgICAgICBhbGxvd2VkX3JvbGVzX2dsb2I9IiR7YWxsb3dlZF9yb2xlc19nbG9iJVwpKn18JHJvbGVfZGV2cHJveHkpIgogICAgZmkKCiAgICBpZiBbWyAiJHRlc3Rfcm9sZSIgPX4gJGFsbG93ZWRfcm9sZXNfZ2xvYiBdXTsgdGhlbgogICAgICAgIGxvZyAiVmVyaWZpZWQgcm9sZSBcIiR0ZXN0X3JvbGVcIiIKICAgIGVsc2UKICAgICAgICBhYm9ydCAiZmFpbGVkIHRvIHZlcmlmeSByb2xlLCByb2xlIFwiJHt0ZXN0X3JvbGV9XCIgbm90IGluIFwiJHthbGxvd2VkX3JvbGVzX2dsb2J9XCIiCiAgICBmaQp9CgojIGdldF9rZXl2YXVsdF9zdWZmaXgKIyBhcmdzOgojIDEpIHJsIC0gbmFtZXJlZiwgc3RyaW5nOyByb2xlIHRvIGdldCBzaG9ydCByb2xlIGZvcgojIDIpIGt2X3N1ZmZpeCAtIG5hbWVyZWYsIHN0cmluZzsgc2hvcnQgcm9sZSB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgbmFtZXJlZgojIDMpIHNlY19wcmVmaXggLSBuYW1lcmVmLCBzdHJpbmc7IGtleXZhdWx0IGNlcnRpZmljYXRlIHByZWZpeCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgbmFtZXJlZgpnZXRfa2V5dmF1bHRfc3VmZml4KCkgewogICAgbG9jYWwgLW4gcmw9IiQxIgogICAgbG9jYWwgLW4ga3Zfc3VmZml4PSIkMiIKICAgIGxvY2FsIC1uIHNlY19wcmVmaXg9IiQzIgoKICAgIGxvY2FsIC1yIGtleXZhdWx0X3N1ZmZpeF9ycD0ic3ZjIgogICAgbG9jYWwgLXIga2V5dmF1bHRfcHJlZml4X2dhdGV3YXk9Imd3eSIKCiAgICBjYXNlICIkcmwiIGluCiAgICAgICAgIiRyb2xlX2dhdGV3YXkiKQogICAgICAgICAgICBrdl9zdWZmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKICAgICAgICAgICAgc2VjX3ByZWZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5IgogICAgICAgICAgICA7OwogICAgICAgICIkcm9sZV9ycCIpCiAgICAgICAgICAgIGt2X3N1ZmZpeD0iJGtleXZhdWx0X3N1ZmZpeF9ycCIKICAgICAgICAgICAgc2VjX3ByZWZpeD0iJHJvbGVfcnAiCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgYWJvcnQgInVua293biByb2xlICRybCIKICAgICAgICAgICAgOzsKICAgIGVzYWMKfQoKIyByZWJvb3Rfdm0gcmVzdG9yZXMgYWxsIHNlbGludXggZmlsZSBjb250ZXh0cywgdGhlbiBzY2hlZHVsZXMgYSByZWJvb3QgZm9yIG9uZSBob3VyIGxhdGVyCiMgUmVib290cyBzaG91bGQgc2NoZWR1bGVkIGFmdGVyIGFsbCBWTSBleHRlbnNpb25zIGhhdmUgaGFkIHRpbWUgdG8gY29tcGxldGUKIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmVzL2V4dGVuc2lvbnMvY3VzdG9tLXNjcmlwdC1saW51eCN0aXBzCnJlYm9vdF92bSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgKHNodXRkb3duIC1yIG5vdyAmKQp9CiMhL2Jpbi9iYXNoCiMgUmVwb3NpdG9yeSBhbmQgcGFja2FnZSBtYW5hZ2VtZW50IHJlbGF0ZWQgZnVuY3Rpb25zCgpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkKCkgewogICAgbG9jYWwgLXIgZXh0ZW5kZWRfcmVwb19jb25maWc9Imh0dHBzOi8vcGFja2FnZXMubWljcm9zb2Z0LmNvbS9jYmwtbWFyaW5lci8yLjAvcHJvZC9leHRlbmRlZC94ODZfNjQvY29uZmlnLnJlcG8iCiAgICBjdXJsIC1zU0wgIiRleHRlbmRlZF9yZXBvX2NvbmZpZyIgLW8gL2V0Yy95dW0ucmVwb3MuZC9tYXJpbmVyLWV4dGVuZGVkLnJlcG8KCiAgICBsb2NhbCAtciByZXBvX25hbWU9ImNibC1tYXJpbmVyMi4wcHJvZGV4dGVuZGVkeDg2XzY0IgoKICAgIGxvY2FsIC1yYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIHVwZGF0ZQogICAgICAgIC15CiAgICAgICAgLS1lbmFibGVyZXBvPSIkcmVwb19uYW1lIgogICAgKQoKICAgIGxvZyAiRW5hYmxpbmcgcmVwbyAkcmVwb19uYW1lIgogICAgcmV0cnkgY21kICIkMSIgIiR7MjotfSIKfQoKIyBjb25maWd1cmVfcnBtX3JlcG9zCiMgTmV3IHJlcG9zaXRvcmllcyBzaG91bGQgYmUgYWRkZWQgaW4gdGhlaXIgb3duIGZ1bmN0aW9ucywgYW5kIGNhbGxlZCBoZXJlCiMgYXJnczoKIyAxKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAyKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmNvbmZpZ3VyZV9ycG1fcmVwb3MoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGNvbmZpZ3VyZV9yZXBvX21hcmluZXJfZXh0ZW5kZWQgIiQxIiAiJHsyOi0xfSIKfQoKIyBkbmZfaW5zdGFsbF9wa2dzCiMgYXJnczoKIyAxKSBwa2dzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBQYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmRuZl9pbnN0YWxsX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBwa2dzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9jYWwgLWEgY21kPSgKICAgICAgICBkbmYKICAgICAgICAteQogICAgICAgIGluc3RhbGwKICAgICkKICAgIAogICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vd3d3LnNoZWxsY2hlY2submV0L3dpa2kvU0MyMjA2CiAgICAjIGFwcGVuZCBwa2dzIGFycmF5IHRvIGNtZAogICAgbWFwZmlsZSAtTyAkKCggJHsjY21kW0BdfSArIDEgKSkgLWQgJyAnIGNtZCA8PDwgIiR7cGtnc1tAXX0iCiAgICBsb2NhbCAtciBjbWQKCiAgICBsb2cgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCBwYWNrYWdlczogJHtwa2dzWypdfSIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCgojIGRuZl91cGRhdGVfcGtncwojIGFyZ3M6CiMgMSkgZXhjbHVkZXMgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXksIG9wdGlvbmFsOyBQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdXBkYXRpbmcKIyAgICAgICBFYWNoIGluZGV4IG11c3QgYmUgcHJlZml4ZWQgd2l0aCAteCAKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpkbmZfdXBkYXRlX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBleGNsdWRlcz0iJHsxOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIC15CiAgICAgICAgIyBSZXBsYWNlZCB3aXRoIGV4Y2x1ZGVzCiAgICAgICAgIiIKICAgICAgICB1cGRhdGUKICAgICAgICAtLWFsbG93ZXJhc2luZwogICAgKQoKICAgIGlmIFsgLW4gIiR7ZXhjbHVkZXN9IiBdOyB0aGVuCiAgICAgICAgIyBSZWZlcmVuY2UgaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIyMDYKICAgICAgICBtYXBmaWxlIC1PIDIgY21kIDw8PCAiJHtleGNsdWRlc1tAXX0iCiAgICBlbHNlCiAgICAgICAgIyBSZW1vdmUgZW1wdHkgc3RyaW5nIGlmIHdlIGFyZW4ndCByZXBsYWNpbmcgdGhlbSwgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIsIGJ1dCB3aHkgbm90IGJlIHNhZmUKICAgICAgICB1bnNldCAiY21kWzJdIgogICAgZmkKICAgIGxvY2FsIC1yIGNtZAoKICAgIGxvZyAiVXBkYXRpbmcgYWxsIHBhY2thZ2VzIGV4Y2x1ZGluZyBcIiR7ZXhjbHVkZXNbKl06LX1cIiIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCiMgY29uZmlndXJlX2RuZl9jcm9uX2pvYgojIGNyZWF0ZSBjcm9uIGpvYiB0byBhdXRvIHVwZGF0ZSBycG0gcGFja2FnZXMKY29uZmlndXJlX2RuZl9jcm9uX2pvYigpIHsKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2NhbCAtciBjcm9uX3dlZWtseV9kbmZfdXBkYXRlX2ZpbGVuYW1lPScvZXRjL2Nyb24ud2Vla2x5L2RuZnVwZGF0ZScKICAgIGxvY2FsIC1yIGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZT0iIyEvYmluL2Jhc2gKZG5mIHVwZGF0ZSAteSIKCiAgICB3cml0ZV9maWxlIGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZW5hbWUgY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlIHRydWUKICAgIGNobW9kIHUreCAiJGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZW5hbWUiCn0KCiMgcnBtX2ltcG9ydF9rZXlzCiMgYXJnczoKIyAxKSBrZXlzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBycG0ga2V5cyB0byBiZSBpbXBvcnRlZAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZApycG1faW1wb3J0X2tleXMoKSB7CiAgICBsb2NhbCAtbiBrZXlzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Iga2V5IGluICR7a2V5c1tAXX07IGRvCiAgICAgICAgaWYgWyAkeyNrZXlzW0BdfSAtZXEgMCBdOyB0aGVuCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZmkKCiAgICAgICAgbG9jYWwgLWEgY21kPSgKICAgICAgICAgICAgcnBtCiAgICAgICAgICAgIC0taW1wb3J0CiAgICAgICAgICAgIC12CiAgICAgICAgICAgICIka2V5IgogICAgICAgICkKCiAgICAgICAgbG9nICJJbXBvcnRpbmcgcnBtIHJlcG9zaXRvcnkga2V5ICRrZXkiCiAgICAgICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIgJiYgdW5zZXQga2V5CiAgICBkb25lCn0KIyEvYmluL2Jhc2gKIyBBUk8gc2VydmljZSBzZXR1cCBmdW5jdGlvbnMKCiMgZW5hYmxlX3NlcnZpY2VzIGVuYWJsZXMgdGhlIHN5c3RlbWQgc2VydmljZXMgdGhhdCBhcmUgcGFzc2VkIGluCiMgYXJnczoKIyAxKSBzZXJ2aWNlcyAtIGFycmF5OyBzZXJ2aWNlcyB0byBiZSBlbmFibGVkCmVuYWJsZV9zZXJ2aWNlcygpIHsKICAgIGxvY2FsIC1uIHN2Y3M9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAoKICAgIGxvZyAiZW5hYmxpbmcgc2VydmljZXMgJHtzdmNzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHN2YyBpbiAke3N2Y3NbQF19OyBkbwogICAgICAgIGxvZyAiRW5hYmxpbmcgYW5kIHN0YXJ0aW5nICRzdmMgbm93IgogICAgICAgIHN5c3RlbWN0bCBlbmFibGUgXAogICAgICAgICAgICAgICAgICAtLW5vdyBcCiAgICAgICAgICAgICAgICAgICIkc3ZjIgogICAgZG9uZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5CiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgY29udGFpbmVyIGltYWdlCiMgMikgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgVk1TUyByb2xlCiMgMykgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nOyBhcm8gZ2F0ZXdheSBlbnZpcm9ubWVudCBmaWxlCiMgNCkgbmV0d29yayAtIG5hbWVyZWYsIHN0cmluZzsgcG9kbWFuIG5ldHdvcmsgbmFtZSB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fZ2F0ZXdheSgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIHJvbGU9IiQyIgogICAgbG9jYWwgLW4gY29uZl9maWxlPSIkMyIKICAgIGxvY2FsIC1uIG5ldHdvcms9IiQ0IgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLWdhdGV3YXkgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tZ2F0ZXdheScKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLWdhdGV3YXkuc2VydmljZScKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9JHthcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lfQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfRkVBVFVSRVMgXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtcCA4MDo4MDgwIFwKICAtcCA4MDgxOjgwODEgXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICAke3JvbGUsLH0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAiCgogICAgd3JpdGVfZmlsZSBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwCiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgUlAgY29udGFpbmVyIGltYWdlCiMgMikgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgVk1TUyByb2xlCiMgMykgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nOyBhcm8gcnAgZW52aXJvbm1lbnQgZmlsZQojIDQpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gcm9sZT0iJDIiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDQiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tcnAgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fcnBfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXJwJwoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1ycC5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcnBfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0ke2Fyb19ycF9jb25mX2ZpbGVuYW1lfQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0kbmV0d29yayBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICAke3JvbGUsLH0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3JwX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19tb25pdG9yKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbW9uaXRvciBzZXJ2aWNlIgoKICAgICMgRE9NQUlOX05BTUUsIENMVVNURVJfTURTRF9BQ0NPVU5ULCBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04sIEdBVEVXQVlfRE9NQUlOUywgR0FURVdBWV9SRVNPVVJDRUdST1VQLCBNRFNEX0VOVklST05NRU5UIENMVVNURVJfTURTRF9OQU1FU1BBQ0UKICAgICMgYXJlIG5vdCB1c2VkLCBidXQgY2FuJ3QgZWFzaWx5IGJlIHJlZmFjdG9yZWQgb3V0LiBTaG91bGQgYmUgcmV2aXNpdGVkIGluIHRoZSBmdXR1cmUuCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3InCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9GUF9DTElFTlRfSUQ9JyRGUENMSUVOVElEJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKTURTRF9FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpDTFVTVEVSX01ETV9BQ0NPVU5UPSckQ0xVU1RFUk1ETUFDQ09VTlQnCkNMVVNURVJfTURNX05BTUVTUEFDRT1CQk0KREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPUJCTQpSUElNQUdFPSckaW1hZ2UnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1vbml0b3Iuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbW9uaXRvcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0kbmV0d29yayBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtbSAyLjVnIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICBtb25pdG9yClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFybyBwb3J0YWwgc2VydmljZSIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcG9ydGFsJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9QT1JUQUxfQUNDRVNTX0dST1VQX0lEUz0nJFBPUlRBTEFDQ0VTU0dST1VQSURTJwpBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEPSckUE9SVEFMQ0xJRU5USUQnCkFaVVJFX1BPUlRBTF9FTEVWQVRFRF9HUk9VUF9JRFM9JyRQT1JUQUxFTEVWQVRFREdST1VQSURTJwpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpLRVlWQVVMVF9QUkVGSVg9JyRLRVlWQVVMVFBSRUZJWCcKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9UG9ydGFsClBPUlRBTF9IT1NUTkFNRT0nJExPQ0FUSU9OLmFkbWluLiRSUFBBUkVOVERPTUFJTk5BTUUnClJQSU1BR0U9JyRpbWFnZSciCgogICAgd3JpdGVfZmlsZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tcG9ydGFsLnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWw9MAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tcG9ydGFsCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtZSBBWlVSRV9QT1JUQUxfQUNDRVNTX0dST1VQX0lEUyBcCiAgLWUgQVpVUkVfUE9SVEFMX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUyBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBQT1JUQUxfSE9TVE5BTUUgXAogIC1tIDJnIFwKICAtcCA0NDQ6ODQ0NCBcCiAgLXAgMjIyMjoyMjIyIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICBwb3J0YWwKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QKIyBhcmdzOgojIDEpIG1vbml0b3Jpbmdfcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgMikgbW9uaXRvcl9jb25maWdfdmVyc2lvbiAtIG5hbWVyZWYsIHN0cmluZzsgbWRzZCBjb25maWcgdmVyc2lvbgpjb25maWd1cmVfc2VydmljZV9tZHNkKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBtb25pdG9yX2NvbmZpZ192ZXJzaW9uPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgImNvbmZpZ3VyaW5nIG1kc2Qgc2VydmljZSIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgbG9jYWwgLXIgbWRzZF9zZXJ2aWNlX2Rpcj0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZHNkLnNlcnZpY2UuZCIKICAgIG1rZGlyIC1wICIkbWRzZF9zZXJ2aWNlX2RpciIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZT0iJG1kc2Rfc2VydmljZV9kaXIvb3ZlcnJpZGUuY29uZiIKICAgIGxvY2FsIC1yIG1kc2RfY2VydGlmaWNhdGVfc2FuPSIkKG9wZW5zc2wgeDUwOSAtaW4gL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUvbWRzZC5wZW0gLW5vb3V0IC1zdWJqZWN0IHwgc2VkIC1lICdzLy4qQ04gPSAvLycpIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC9tZHNkIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZT0iTURTRF9ST0xFX1BSRUZJWD0vdmFyL3J1bi9tZHNkL2RlZmF1bHQKTURTRF9PUFRJT05TPVwiLUEgLWQgLXIgXCRNRFNEX1JPTEVfUFJFRklYXCIKCmV4cG9ydCBNT05JVE9SSU5HX0dDU19FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FDQ09VTlQ9JyRSUE1EU0RBQ0NPVU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfUkVHSU9OPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0CmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEPSckbWRzZF9jZXJ0aWZpY2F0ZV9zYW4nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19OQU1FU1BBQ0U9JyRSUE1EU0ROQU1FU1BBQ0UnCmV4cG9ydCBNT05JVE9SSU5HX0NPTkZJR19WRVJTSU9OPSckbW9uaXRvcl9jb25maWdfdmVyc2lvbicKZXhwb3J0IE1PTklUT1JJTkdfVVNFX0dFTkVWQV9DT05GSUdfU0VSVklDRT10cnVlCgpleHBvcnQgTU9OSVRPUklOR19URU5BTlQ9JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfUk9MRT0nJHJvbGUnCmV4cG9ydCBNT05JVE9SSU5HX1JPTEVfSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCgpleHBvcnQgTURTRF9NU0dQQUNLX1NPUlRfQ09MVU1OUz1cIjFcIiIKCiAgICB3cml0ZV9maWxlIGRlZmF1bHRfbWRzZF9maWxlbmFtZSBkZWZhdWx0X21kc2RfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0CiMgYXJnczoKIyAxKSBjb25mX2ZpbGUgLSBzdHJpbmc7IGZsdWVuYml0IGNvbmZpZ3VyYXRpb24gZmlsZQojIDIpIGltYWdlIC0gc3RyaW5nOyBmbHVlbnRiaXQgY29udGFpbmVyIGltYWdlIHRvIHJ1bgojIDMpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0KCkgewogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQxIgogICAgbG9jYWwgLW4gaW1hZ2U9IiQyIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBmbHVlbnRiaXQgc2VydmljZSIKCiAgICBta2RpciAtcCAvZXRjL2ZsdWVudGJpdC8KICAgIG1rZGlyIC1wIC92YXIvbGliL2ZsdWVudAoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgY29uZl9maWxlbmFtZT0nL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYnCiAgICB3cml0ZV9maWxlIGNvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvZmx1ZW50Yml0JwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBzeXNjb25maWdfZmlsZT0iRkxVRU5UQklUSU1BR0U9JGltYWdlIgoKICAgIHdyaXRlX2ZpbGUgc3lzY29uZmlnX2ZpbGVuYW1lIHN5c2NvbmZpZ19maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHNlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vZmx1ZW50Yml0LnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHNlcnZpY2VfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsU2VjPTAKCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0tc2VjdXJpdHktb3B0IGxhYmVsPWRpc2FibGUgXAogIC0tZW50cnlwb2ludCAvb3B0L3RkLWFnZW50LWJpdC9iaW4vdGQtYWdlbnQtYml0IFwKICAtLW5ldD1ob3N0IFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLXYgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmY6L2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYgXAogIC12IC92YXIvbGliL2ZsdWVudDovdmFyL2xpYi9mbHVlbnQ6eiBcCiAgLXYgL3Zhci9sb2cvam91cm5hbDovdmFyL2xvZy9qb3VybmFsOnJvIFwKICAtdiAvZXRjL21hY2hpbmUtaWQ6L2V0Yy9tYWNoaW5lLWlkOnJvIFwKICAkaW1hZ2UgXAogIC1jIC9ldGMvZmx1ZW50Yml0L2ZsdWVudGJpdC5jb25mCgpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTUKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIHNlcnZpY2VfZmlsZW5hbWUgc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfdGltZXJzX21kbV9tZHNkCiMgYXJnczoKIyAxKSByb2xlIC0gc3RyaW5nOyBjYW4gYmUgImdhdGV3YXkiIG9yICJycCIKY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCgpIHsKICAgIGxvY2FsIC1uIHJvbGU9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgbG9jYWwga2V5dmF1bHRfc3VmZml4IHNlY3JldF9wcmVmaXgKICAgIGdldF9rZXl2YXVsdF9zdWZmaXggcm9sZSBrZXl2YXVsdF9zdWZmaXggc2VjcmV0X3ByZWZpeAoKICAgIGZvciB2YXIgaW4gIm1kc2QiICJtZG0iOyBkbwogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy5zZXJ2aWNlIgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaAoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2ggJHZhciIKCiAgICAgICAgd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZSB0cnVlCgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL2Rvd25sb2FkLSR2YXItY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaApBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbVGltZXJdCk9uQm9vdFNlYz0wbWluCk9uQ2FsZW5kYXI9MC8xMjowMDowMApBY2N1cmFjeVNlYz01cwoKW0luc3RhbGxdCldhbnRlZEJ5PXRpbWVycy50YXJnZXQiCgogICAgICAgIHdyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZSB0cnVlCiAgICBkb25lCgogICAgbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lPSIvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGU9IiMhL2Jpbi9iYXNoCnNldCAtZXUKCkNPTVBPTkVOVD1cJDEKZWNobyBcIkRvd25sb2FkIFwkQ09NUE9ORU5UIGNyZWRlbnRpYWxzXCIKClRFTVBfRElSPVwiXCQobWt0ZW1wIC1kKVwiCmV4cG9ydCBBWlVSRV9DT05GSUdfRElSPVwiXCQobWt0ZW1wIC1kKVwiCgplY2hvIFwiTG9nZ2luZyBpbnRvIEF6dXJlLi4uXCIKUkVUUklFUz0zCndoaWxlIFtbIFwkUkVUUklFUyAtZ3QgMCBdXTsgZG8KICAgIGlmIGF6IGxvZ2luIC1pIC0tYWxsb3ctbm8tc3Vic2NyaXB0aW9ucwogICAgdGhlbgogICAgICAgIGVjaG8gXCJheiBsb2dpbiBzdWNjZXNzZnVsXCIKICAgICAgICBicmVhawogICAgZWxzZQogICAgICAgIGVjaG8gXCJheiBsb2dpbiBmYWlsZWQuIFJldHJ5aW5nLi4uXCIKICAgICAgICBsZXQgUkVUUklFUy09MQogICAgICAgIHNsZWVwIDUKICAgIGZpCmRvbmUKCnRyYXAgXCJjbGVhbnVwXCIgRVhJVAoKY2xlYW51cCgpIHsKICBheiBsb2dvdXQKICBbWyBcJFRFTVBfRElSID1+IC90bXAvLisgXV0gJiYgcm0gLXJmIFwkVEVNUF9ESVIKICBbWyBcJEFaVVJFX0NPTkZJR19ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRBWlVSRV9DT05GSUdfRElSCn0KCmlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZG1cIiBdXTsgdGhlbgogIENVUlJFTlRfQ0VSVF9GSUxFPVwiL2V0Yy9tZG0ucGVtXCIKZWxpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbVwiCmVsc2UKICBlY2hvIEludmFsaWQgdXNhZ2UgJiYgZXhpdCAxCmZpCgpTRUNSRVRfTkFNRT1cIiRzZWNyZXRfcHJlZml4LVwke0NPTVBPTkVOVH1cIgpORVdfQ0VSVF9GSUxFPVwiXCRURU1QX0RJUi9cJENPTVBPTkVOVC5wZW1cIgpmb3IgYXR0ZW1wdCBpbiB7MS4uNX07IGRvCiAgYXoga2V5dmF1bHQgXAogICAgc2VjcmV0IFwKICAgIGRvd25sb2FkIFwKICAgIC0tZmlsZSBcIlwkTkVXX0NFUlRfRklMRVwiIFwKICAgIC0taWQgXCJodHRwczovLyRLRVlWQVVMVFBSRUZJWC0ka2V5dmF1bHRfc3VmZml4LiRLRVlWQVVMVEROU1NVRkZJWC9zZWNyZXRzL1wkU0VDUkVUX05BTUVcIiBcCiAgICAmJiBicmVhawogIGlmIFtbIFwkYXR0ZW1wdCAtbHQgNSBdXTsgdGhlbiBzbGVlcCAxMDsgZWxzZSBleGl0IDE7IGZpCmRvbmUKCmlmIFsgLWYgXCRORVdfQ0VSVF9GSUxFIF07IHRoZW4KICBpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgICBjaG93biBzeXNsb2c6c3lzbG9nIFwkTkVXX0NFUlRfRklMRQogIGVsc2UKICAgIHNlZCAtaSAtbmUgJzEsL0VORCBDRVJUSUZJQ0FURS8gcCcgXCRORVdfQ0VSVF9GSUxFCiAgZmkKCiAgbmV3X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRORVdfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBjdXJyZW50X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRDVVJSRU5UX0NFUlRfRklMRVwiIC1ub291dCAtc2VyaWFsIHwgYXdrIC1GPSAne3ByaW50IFwkMn0nKVwiCiAgaWYgW1sgISAteiBcJG5ld19jZXJ0X3NuIF1dICYmIFtbIFwkbmV3X2NlcnRfc24gIT0gXCJcJGN1cnJlbnRfY2VydF9zblwiIF1dOyB0aGVuCiAgICBlY2hvIHVwZGF0aW5nIGNlcnRpZmljYXRlIGZvciBcJENPTVBPTkVOVAogICAgY2htb2QgMDYwMCBcJE5FV19DRVJUX0ZJTEUKICAgIG12IFwkTkVXX0NFUlRfRklMRSBcJENVUlJFTlRfQ0VSVF9GSUxFCiAgZmkKZWxzZQogIGVjaG8gRmFpbGVkIHRvIHJlZnJlc2ggY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UICYmIGV4aXQgMQpmaSIKCiAgICB3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZSB0cnVlCgogICAgY2htb2QgdSt4IC91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoCgogICAgJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZHNkICYKICAgIHdhaXQgIiQhIgoKCiAgICAkZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kbSAmCiAgICB3YWl0ICIkISIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5zZXJ2aWNlIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249V2F0Y2ggZm9yIGNoYW5nZXMgaW4gbWRtLnBlbSBhbmQgcmVzdGFydHMgdGhlIG1kbSBzZXJ2aWNlCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzdGFydCBtZG0uc2VydmljZQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWUgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZT0nL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0vd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGU9J1tQYXRoXQpQYXRoTW9kaWZpZWQ9L2V0Yy9tZG0ucGVtCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCgogICAgd3JpdGVfZmlsZSB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZSB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlIHRydWUKCiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHM9J3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAiJHdhdGNoX21kbV9jcmVkcyIgfHwgYWJvcnQgImZhaWxlZCB0byBlbmFibGUgYW5kIHN0YXJ0ICR3YXRjaF9tZG1fY3JlZHMiCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfbWRtCiMgYXJnczoKIyAxKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBjYW4gYmUgImdhdGV3YXkiIG9yICJycCIKIyAyKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgbWRtIGNvbnRhaW5lciBpbWFnZSB0byBydW4KIyAzKSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX21kbSgpIHsKICAgIGxvY2FsIC1uIHJvbGU9IiQxIgogICAgbG9jYWwgLW4gaW1hZ2U9IiQyIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBtZG0gc2VydmljZSIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGVuYW1lPSIvZXRjL3N5c2NvbmZpZy9tZG0iCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19tZG1fZmlsZT0iTURNRlJPTlRFTkRVUkw9JyRNRE1GUk9OVEVORFVSTCcKTURNSU1BR0U9JyRpbWFnZScKTURNU09VUkNFRU5WSVJPTk1FTlQ9JyRMT0NBVElPTicKTURNU09VUkNFUk9MRT0nJHJvbGUnCk1ETVNPVVJDRVJPTEVJTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIiCgogICAgd3JpdGVfZmlsZSBzeXNjb25maWdfbWRtX2ZpbGVuYW1lIHN5c2NvbmZpZ19tZG1fZmlsZSB0cnVlCgogICAgbWtkaXIgLXAgL3Zhci9ldHcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vbWRtLnNlcnZpY2UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kbV9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL21kbQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1lbnRyeXBvaW50IC91c3Ivc2Jpbi9NZXRyaWNzRXh0ZW5zaW9uIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtbSAyZyBcCiAgLXYgL2V0Yy9tZG0ucGVtOi9ldGMvbWRtLnBlbSBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICAtQ2VydEZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtRnJvbnRFbmRVcmwgJE1ETUZST05URU5EVVJMIFwKICAtTG9nZ2VyIENvbnNvbGUgXAogIC1Mb2dMZXZlbCBXYXJuaW5nIFwKICAtUHJpdmF0ZUtleUZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtU291cmNlRW52aXJvbm1lbnQgJExPQ0FUSU9OIFwKICAtU291cmNlUm9sZSAkcm9sZSBcCiAgLVNvdXJjZVJvbGVJbnN0YW5jZSAkSE9TVE5BTUUKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBtZG1fc2VydmljZV9maWxlbmFtZSBtZG1fc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfdm1zc19hcm9fc2VydmljZQojIGFyZ3M6CiMgMSkgciAtIG5hbWVyZWYsIHN0cmluZzsgcm9sZSBvZiBWTVNTCiMgMikgaW1hZ2VzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IEFSTyBjb250YWluZXIgaW1hZ2VzCiMgMykgY29uZmlncyAtIG5hbWVyZWYsIGFzc29jaWF0aXZlIGFycmF5OyBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB2ZXJzaW9ucy4gVGhlIHZhbHVlcyBzaG91bGQgYmUgYSByZWZlcmVuY2UgdG8gdmFyaWFibGVzLCBub3QgZGVyZWZlcmVuY2VkLgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgbmFtZXJlZiB2YXJpYWJsZXMgYnkgaGVscGVyIGZ1bmN0aW9ucy4KY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzKCkgewogICAgbG9jYWwgLW4gcj0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZXM9IiQyIgogICAgbG9jYWwgLW4gY29uZmlncz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgdmVyaWZ5X3JvbGUgIiQxIgoKICAgIGlmIFsgIiRyIiA9PSAiJHJvbGVfZ2F0ZXdheSIgXTsgdGhlbgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5ICIke2ltYWdlc1sicnAiXX0iICIkMSIgIiR7Y29uZmlnc1siZ2F0ZXdheV9jb25maWciXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICAgICAgY29uZmlndXJlX2NlcnRzX2dhdGV3YXkKICAgIGVsaWYgWyAiJHIiID09ICIkcm9sZV9ycCIgXTsgdGhlbgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19ycCAiJHtpbWFnZXNbInJwIl19IiAiJDEiICIke2NvbmZpZ3NbInJwX2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwgIiR7aW1hZ2VzWyJycCJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgICAgICBjb25maWd1cmVfY2VydHNfcnAKICAgIGZpCgogICAgY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0ICIke2NvbmZpZ3NbImZsdWVudGJpdCJdfSIgIiR7aW1hZ2VzWyJmbHVlbnRiaXQiXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICBjb25maWd1cmVfdGltZXJzX21kbV9tZHNkICIkMSIKICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX21kbSAiJDEiICIke2ltYWdlc1sibWRtIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRzZCAiJDEiICIke2NvbmZpZ3NbIm1kc2QiXX0iCiAgICBydW5fYXpzZWNkX2NvbmZpZ19zY2FuCn0KCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKIyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgc291cmNlZCBieSBib290c3RyYXBwaW5nIHNjcmlwdHMgZm9yIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zCgojIGdldF9ib290X2Rldl91dWlkCiMgR2V0IHRoZSBib290IGRldmljZXMgdXVpZAojIGFyZ3M6CiMgMSkgYm9vdF9kZXZfdXVpZCAtIG5hbWVyZWYsIHN0cmluZzsgRW1wdHkgdmFyaWFibGUgZm9yIGJvb3QgZGV2aWNlIHV1aWQgYXNzaWdubWVudAojIFRha2VuIGFuZCByZWZhY3RvcmVkIGZyb20gaHR0cHM6Ly9lbmcubXMvZG9jcy9wcm9kdWN0cy9henVyZS1saW51eC9mZWF0dXJlcy9zZWN1cml0eS9maXBzCmdldF9ib290X2Rldl91dWlkKCkgewogICAgbG9jYWwgLW4gYm9vdF9kZXZfdXVpZD0iJDEiCiAgICAjIFNldCBib290X3V1aWQgdmFyaWFibGUgZm9yIHRoZSBib290IHBhcnRpdGlvbiBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcm9vdAogICAgYm9vdF9kZXY9IiQoZGYgL2Jvb3QvIHwgdGFpbCAtMSB8IGN1dCAtZCcgJyAtZjEpIgogICAgcm9vdF9kZXY9IiQoZGYgLyB8IHRhaWwgLTEgfCBjdXQgLWQnICcgLWYxKSIKCiAgICBib290X2Rldl91dWlkPSIkcm9vdF9kZXYiCiAgICBpZiBbICIkYm9vdF9kZXYiICE9ICIkcm9vdF9kZXYiIF07IHRoZW4KICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBib290X2Rldl91dWlkPSJib290PVVVSUQ9JChibGtpZCAiJGJvb3RfZGV2IiAtcyBVVUlEIC1vIHZhbHVlKSIKICAgIGZpCn0KCiMgZmlwc192ZXJpZnkKIyBWZXJpZnkgdGhhdCBmaXBzIG1vZGUgaXMgZW5hYmxlZAojIFRha2VuIGFuZCByZWZhY3RvcmVkIGZyb20gaHR0cHM6Ly9lbmcubXMvZG9jcy9wcm9kdWN0cy9henVyZS1saW51eC9mZWF0dXJlcy9zZWN1cml0eS9maXBzCmZpcHNfdmVyaWZ5KCkgewogICAgZmlwc19lbmFibGVkX3Byb2M9IiQoY2F0IC9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFibGVkKSIKICAgIGZpcHNfZW5hYmxlZF9zeXNjdGw9IiQoc3lzY3RsIC1uIGNyeXB0by5maXBzX2VuYWJsZWQpIgogICAgaWYgWyAiJGZpcHNfZW5hYmxlZF9wcm9jIiAtbmUgMSBdIHx8IFsgIiRmaXBzX2VuYWJsZWRfc3lzY3RsIiAtbmUgMSBdOyB0aGVuCiAgICAgICAgYWJvcnQgIkZJUFMgbW9kZSBpcyBkaXNhYmxlZCIKICAgIGZpCgogICAgbG9nICJGSVBTIG1vZGUgaXMgZW5hYmxlZCIKfQoKIyBmaXBzX2NvbmZpZ3VyZQojIENvbmZpZ3VyZXMgVk0gdG8gcnVuIHdpdGggZmlwcyBtb2RlIGVuYWJsZWQKIyBUYWtlbiBhbmQgcmVmYWN0b3JlZCBmcm9tIGh0dHBzOi8vZW5nLm1zL2RvY3MvcHJvZHVjdHMvYXp1cmUtbGludXgvZmVhdHVyZXMvc2VjdXJpdHkvZmlwcwojIFRPRE8gcmVtb3ZlIHRoaXMgb25jZSBza3UgY2JsLW1hcmluZXItMi1nZW4yLWZpcHMgaXMgc3VwcG9ydGVkIGJ5IGF1dG9tYXRpYyBPUyB1cGRhdGVzCiMgUmVmZXJlbmNlOiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMtYXV0b21hdGljLXVwZ3JhZGUjc3VwcG9ydGVkLW9zLWltYWdlcwpmaXBzX2NvbmZpZ3VyZSgpIHsKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgYm9vdF91dWlkCiAgICBnZXRfYm9vdF9kZXZfdXVpZCBib290X3V1aWQKCiAgICBsb2NhbCBncnViMl9lbnYKICAgIGlmIGdydWIyX2Vudj0iJChncnViMi1lZGl0ZW52IC0gbGlzdCB8IGdyZXAga2VybmVsb3B0cykiOyB0aGVuCiAgICAgICAgZ3J1YjItZWRpdGVudiAtIHNldCAiJGdydWIyX2VudiBmaXBzPTEgJGJvb3RfdXVpZCIKICAgIGVsc2UKICAgICAgICBncnViYnkgLS11cGRhdGUta2VybmVsPUFMTCAtLWFyZ3M9ImZpcHM9MSAkYm9vdF91dWlkIgogICAgZmkKCiAgICAjIGZpcHMgbW9kZSB2ZXJpZmljYXRpb24gd2lsbCBmYWlsIHVudGlsIGFmdGVyIHRoZSB2bSBoYXMgYmVlbiByZWJvb3RlZAogICAgIyBmaXBzX3ZlcmlmeQp9CgojIGNvbmZpZ3VyZV9zc2hkCiMgV2UgbmVlZCB0byBjb25maWd1cmUgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB0byB5ZXMgaW4gb3JkZXIgZm9yIHRoZSBWTVNTIEFjY2VzcyBKSVQgdG8gd29yawpjb25maWd1cmVfc3NoZCgpIHsKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2NhbCAtciBzc2hkX2NvbmZpZz0iL2V0Yy9zc2gvc3NoZF9jb25maWciCgogICAgbG9nICJFZGl0aW5nICRzc2hkX2NvbmZpZyB0byBhbGxvdyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiIKICAgIHNlZCAtaSAncy9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIG5vL1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzL2cnICIkc3NoZF9jb25maWciCgogICAgc3lzdGVtY3RsIHJlbG9hZCBzc2hkLnNlcnZpY2UgfHwgYWJvcnQgInNzaGQgZmFpbGVkIHRvIHJlbG9hZCIKfQoKIyBjb25maWd1cmVfbG9ncm90YXRlIGNsb2JiZXJzIC9ldGMvbG9ncm90YXRlLmNvbmYKIyBhcmdzOgojIDEpIGRyb3Bpbl9maWxlcyAtIG5hbWVyZWYsIGFzc29jaWF0aXZlIGFycmF5LCBvcHRpb25hbDsgbG9ncm90YXRlIGZpbGVzIHRvIHdyaXRlIHRvIC9ldGMvbG9ncm90YXRlLmQKIyAgICAgICBLZXkgbmFtZSBkaWN0YXRlcyBmaWxlbmFtZXMgd3JpdHRlbiB0byAvZXRjL2xvZ3JvdGF0ZS5kLgojIEV4YW1wbGU6IAojICAgS2V5IGRpY3RhdGVzIHRoZSBmaWxlbmFtZSB3cml0dGVuIGluIC9ldGMvbG9ncm90YXRlLmQKIyAgIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKIyAgIGxvY2FsIC1yQSBsb2dyb3RhdGVfZHJvcGlucz0oCiMgICAgICBbImdhdGV3YXkiXT0iJGdhdGV3YXlfbG9nX2ZpbGUiCiMgICApCmNvbmZpZ3VyZV9sb2dyb3RhdGUoKSB7CiAgICBsb2NhbCAtbiBkcm9waW5fZmlsZXM9IiR7MTotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlbmFtZT0nL2V0Yy9sb2dyb3RhdGUuY29uZicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbG9ncm90YXRlX2NvbmZfZmlsZT0nIyBzZWUgIm1hbiBsb2dyb3RhdGUiIGZvciBkZXRhaWxzCiMgcm90YXRlIGxvZyBmaWxlcyB3ZWVrbHkKd2Vla2x5CgojIGtlZXAgMiB3ZWVrcyB3b3J0aCBvZiBiYWNrbG9ncwpyb3RhdGUgMgoKIyBjcmVhdGUgbmV3IChlbXB0eSkgbG9nIGZpbGVzIGFmdGVyIHJvdGF0aW5nIG9sZCBvbmVzCmNyZWF0ZQoKIyB1c2UgZGF0ZSBhcyBhIHN1ZmZpeCBvZiB0aGUgcm90YXRlZCBmaWxlCmRhdGVleHQKCiMgdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgeW91ciBsb2cgZmlsZXMgY29tcHJlc3NlZApjb21wcmVzcwoKIyBSUE0gcGFja2FnZXMgZHJvcCBsb2cgcm90YXRpb24gaW5mb3JtYXRpb24gaW50byB0aGlzIGRpcmVjdG9yeQppbmNsdWRlIC9ldGMvbG9ncm90YXRlLmQKCiMgbm8gcGFja2FnZXMgb3duIHd0bXAgYW5kIGJ0bXAgLS0gd2Ugd2lsbCByb3RhdGUgdGhlbSBoZXJlCi92YXIvbG9nL3d0bXAgewogICAgbW9udGhseQogICAgY3JlYXRlIDA2NjQgcm9vdCB1dG1wCiAgICAgICAgbWluc2l6ZSAxTQogICAgcm90YXRlIDEKfQoKL3Zhci9sb2cvYnRtcCB7CiAgICBtaXNzaW5nb2sKICAgIG1vbnRobHkKICAgIGNyZWF0ZSAwNjAwIHJvb3QgdXRtcAogICAgcm90YXRlIDEKfScKCiAgICB3cml0ZV9maWxlIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lIGxvZ3JvdGF0ZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIGlmIFsgLW4gIiR7ZHJvcGluX2ZpbGVzWypdfSIgXTsgdGhlbgogICAgICAgIGxvY2FsIC1yIGxvZ3JvdGF0ZV9kPSIvZXRjL2xvZ3JvdGF0ZS5kIgogICAgICAgIGxvZyAiV3JpdGluZyBsb2dyb3RhdGUgZmlsZXMgdG8gJGxvZ3JvdGF0ZV9kIgogICAgICAgIGZvciBkcm9waW5fbmFtZSBpbiAiJHshZHJvcGluX2ZpbGVzW0BdfSI7IGRvCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZW5hbWU9IiRsb2dyb3RhdGVfZC8kZHJvcGluX25hbWUiCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZT0iJHtkcm9waW5fZmlsZXNbIiRkcm9waW5fbmFtZSJdfSIKICAgICAgICAgICAgd3JpdGVfZmlsZSBkcm9waW5fZmlsZW5hbWUgZHJvcGluX2ZpbGUgdHJ1ZQogICAgICAgIGRvbmUKICAgIGZpCn0KCiMgcHVsbF9jb250YWluZXJfaW1hZ2VzCiMgYXJnczoKIyAxKSBwdWxsX2ltYWdlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheQojIDIpIHJlZ2lzdHJ5X2NvbmYgLSBuYW1lcmVmLCBzdHJpbmcsIG9wdGlvbmFsOyBwYXRoIHRvIGRvY2tlci9wb2RtYW4gY29uZmlndXJhdGlvbiBmaWxlCnB1bGxfY29udGFpbmVyX2ltYWdlcygpIHsKICAgIGxvY2FsIC1uIHB1bGxfaW1hZ2VzPSIkMSIKICAgIGxvY2FsIC1uIHJlZ2lzdHJ5X2NvbmY9IiR7MjotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmkgcmV0cnlfdGltZT0zMAogICAgIyBUaGUgbWFuYWdlZCBpZGVudGl0eSB0aGF0IHRoZSBWTSBydW5zIGFzIG9ubHkgaGFzIGEgc2luZ2xlIHJvbGVhc3NpZ25tZW50LgogICAgIyBUaGlzIHJvbGUgYXNzaWdubWVudCBpcyBBQ1JQdWxsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSBwcmVzZW50IGluIHRoZQogICAgIyBzdWJzY3JpcHRpb24gd2UncmUgZGVwbG95aW5nIGludG8uICBJZiB0aGUgaWRlbnRpdHkgZG9lcyBub3QgaGF2ZSBhbnkKICAgICMgcm9sZSBhc3NpZ25tZW50cyBzY29wZWQgb24gdGhlIHN1YnNjcmlwdGlvbiB3ZSdyZSBkZXBsb3lpbmcgaW50bywgaXQgd2lsbAogICAgIyBub3Qgc2hvdyBvbiBheiBsb2dpbiAtaSwgd2hpY2ggaXMgd2h5IHRoZSBiZWxvdyBsaW5lIGlzIGNvbW1lbnRlZC4KICAgICMgYXogYWNjb3VudCBzZXQgLXMgIiRTVUJTQ1JJUFRJT05JRCIKICAgIGNtZD0oCiAgICAgICAgYXoKICAgICAgICBsb2dpbgogICAgICAgIC1pCiAgICAgICAgLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zCiAgICApCgogICAgbG9nICJSdW5uaW5nIGF6IGxvZ2luIHdpdGggcmV0cmllcyIKICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCgogICAgIyBTdXBwcmVzcyBlbXVsYXRpb24gb3V0cHV0IGZvciBwb2RtYW4gaW5zdGVhZCBvZiBkb2NrZXIgZm9yIGF6IGFjciBjb21wYXRhYmlsaXR5CiAgICBta2RpciAtcCAvZXRjL2NvbnRhaW5lcnMvCiAgICBta2RpciAtcCAvcm9vdC8uZG9ja2VyCiAgICB0b3VjaCAvZXRjL2NvbnRhaW5lcnMvbm9kb2NrZXIKCiAgICAjIFRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSBjYXNlIHRoYXQgYXogYWNyIGxvZ2luIHNlYXJjaGVzIGZvciB0aGlzIGluIGl0J3MgZW52aXJvbm1lbnQKICAgIGV4cG9ydCBSRUdJU1RSWV9BVVRIX0ZJTEU9Ii9yb290Ly5kb2NrZXIvY29uZmlnLmpzb24iCiAgICAKICAgIGlmIFsgLW4gIiR7cmVnaXN0cnlfY29uZn0iIF07IHRoZW4KICAgICAgICB3cml0ZV9maWxlIFJFR0lTVFJZX0FVVEhfRklMRSByZWdpc3RyeV9jb25mIHRydWUKICAgIGZpCgogICAgbG9nICJsb2dnaW5nIGludG8gcHJvZCBhY3IiCiAgICBjbWQ9KAogICAgICAgIGF6CiAgICAgICAgYWNyCiAgICAgICAgbG9naW4KICAgICAgICAtLW5hbWUKICAgICAgICAjIFRPRE8gcmVwbGFjZSB0aGlzIHdpdGggdmFyaWFibGUgZXhwYW5zaW9uCiAgICAgICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vd3d3LnNoZWxsY2hlY2submV0L3dpa2kvU0MyMDAxCiAgICAgICAgIiQoc2VkIC1lICdzfC4qL3x8JyA8PDwiJEFDUlJFU09VUkNFSUQiKSIKICAgICkKCiAgICByZXRyeSBjbWQgcmV0cnlfdGltZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIGkgaW4gJHtwdWxsX2ltYWdlc1tAXX07IGRvCiAgICAgICAgbG9jYWwgLW4gaW1hZ2U9IiRpIgogICAgICAgIGNtZD0oCiAgICAgICAgICAgIHBvZG1hbgogICAgICAgICAgICBwdWxsCiAgICAgICAgICAgICIkaW1hZ2UiCiAgICAgICAgKQoKICAgICAgICBsb2cgIlB1bGxpbmcgaW1hZ2UgJGltYWdlIHdpdGggcmV0cmllcyBub3ciCiAgICAgICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKICAgIGRvbmUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGNtZD0oCiAgICAgICAgYXoKICAgICAgICBsb2dvdXQKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9nb3V0IHdpdGggcmV0cmllcyIKICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCn0KCiMgY29uZmlndXJlX2NlcnRzX2dlbmVyYWwgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgY29tbW9uIHRvIGFsbCBWTVNTIGluc3RhbmNlcwpjb25maWd1cmVfY2VydHNfZ2VuZXJhbCgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzZXR0aW5nIE1PTklUT1JJTkdfR0NTX0FVVEhfSURfVFlQRT1BdXRoS2V5VmF1bHQgc2VlbXMgdG8gaGF2ZSBjYXVzZWQgbWRzZCBub3QKICAgICMgdG8gaG9ub3VyIFNTTF9DRVJUX0ZJTEUgYW55IG1vcmUsIGhlYXZlbiBvbmx5IGtub3dzIHdoeS4KICAgIGxvY2FsIC1yIHNzbF9jZXJ0c19iYXNlZGlyPSIvdXNyL2xpYi9zc2wvY2VydHMiCiAgICBta2RpciAtcCAiJHNzbF9jZXJ0c19iYXNlZGlyIgogICAgY3NwbGl0IC1mICIkc3NsX2NlcnRzX2Jhc2VkaXIvY2VydC0iIC1iICUwM2QucGVtIC9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0IC9eJC8xICJ7Kn0iIDE+L2Rldi9udWxsCiAgICBjX3JlaGFzaCAiJHNzbF9jZXJ0c19iYXNlZGlyIgp9CgojIGNvbmZpZ3VyZV9jZXJ0c19ycCBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBmb3IgUlAgVk1TUwojIGFyZ3M6CmNvbmZpZ3VyZV9jZXJ0c19ycCgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZV9ycAoKICAgIGxvY2FsIC1yIHJwX2NlcnRzX2Jhc2VkaXI9Ii9ldGMvYXJvLXJwIgogICAgbWtkaXIgLXAgIiRycF9jZXJ0c19iYXNlZGlyIgogICAgYmFzZTY0IC1kIDw8PCIkQURNSU5BUElDQUJVTkRMRSIgPiAiJHJwX2NlcnRzX2Jhc2VkaXIvYWRtaW4tY2EtYnVuZGxlLnBlbSIKICAgIGlmIFtbIC1uICIkQVJNQVBJQ0FCVU5ETEUiIF1dOyB0aGVuCiAgICBiYXNlNjQgLWQgPDw8IiRBUk1BUElDQUJVTkRMRSIgPiAiJHJwX2NlcnRzX2Jhc2VkaXIvYXJtLWNhLWJ1bmRsZS5wZW0iCiAgICBmaQogICAgY2hvd24gLVIgMTAwMDoxMDAwICIkcnBfY2VydHNfYmFzZWRpciIKCiAgICBjb25maWd1cmVfY2VydHNfZ2VuZXJhbAp9CgojIGNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5IENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGZvciBHYXRld2F5IFZNU1MgaW5zdGFuY2VzCmNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5KCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlX2dhdGV3YXkKICAgIGNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KCiMgY29uZmlndXJlX2NlcnRzX2RldnByb3h5IENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGZvciBkZXZwcm94eSBWTVNTIGluc3RhbmNlcwpjb25maWd1cmVfY2VydHNfZGV2cHJveHkoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGVfZGV2cHJveHkgdHJ1ZQogICAgCiAgICBsb2NhbCAtciBwcm94eV9jZXJ0c19iYXNlZGlyPSIvZXRjL3Byb3h5IgogICAgbWtkaXIgLXAgIiRwcm94eV9jZXJ0c19iYXNlZGlyIgogICAgYmFzZTY0IC1kIDw8PCIkUFJPWFlDRVJUIiA+ICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5jcnQiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUtFWSIgPiAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkua2V5IgogICAgYmFzZTY0IC1kIDw8PCIkUFJPWFlDTElFTlRDRVJUIiA+ICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS1jbGllbnQuY3J0IgogICAgY2hvd24gLVIgMTAwMDoxMDAwIC9ldGMvcHJveHkKICAgIGNobW9kIDA2MDAgIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LmtleSIKfQoKY29uZmlndXJlX2F6c2VjZF9zY2FuKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHdlIGxlYXZlIGNsaWVudElkIGJsYW5rIGFzIGxvbmcgYXMgb25seSAxIG1hbmFnZWQgaWRlbnRpdHkgYXNzaWduZWQgdG8gdm1zcwogICAgIyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxLCB3ZSB3aWxsIG5lZWQgdG8gcG9wdWxhdGUgd2l0aCBjbGllbnRJZCB1c2VkIGZvciBvZmYtbm9kZSBzY2FubmluZwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBub2Rlc2Nhbl9hZ2VudF9maWxlbmFtZT0iL2V0Yy9kZWZhdWx0L3ZzYS1ub2Rlc2Nhbi1hZ2VudC5jb25maWciCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG5vZGVzY2FuX2FnZW50X2ZpbGU9InsKICAgIFwiTmljZVwiOiAxOSwKICAgIFwiVGltZW91dFwiOiAxMDgwMCwKICAgIFwiQ2xpZW50SWRcIjogXCJcIiwKICAgIFwiVGVuYW50SWRcIjogJEFaVVJFU0VDUEFDS1ZTQVRFTkFOVElELAogICAgXCJRdWFseXNTdG9yZUJhc2VVcmxcIjogJEFaVVJFU0VDUEFDS1FVQUxZU1VSTCwKICAgIFwiUHJvY2Vzc1RpbWVvdXRcIjogMzAwLAogICAgXCJDb21tYW5kRGVsYXlcIjogMAogIH0iCgogICAgd3JpdGVfZmlsZSBub2Rlc2Nhbl9hZ2VudF9maWxlbmFtZSBub2Rlc2Nhbl9hZ2VudF9maWxlIHRydWUKfQoKIyBydW5fYXpzZWNkX2NvbmZpZ19zY2FuCnJ1bl9henNlY2RfY29uZmlnX3NjYW4oKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGNvbmZpZ3VyZV9henNlY2Rfc2NhbgoKICAgIGxvY2FsIC1hciBjb25maWdzPSgKICAgICAgICAiYmFzZWxpbmUiCiAgICAgICAgImNsYW1hdiIKICAgICAgICAic29mdHdhcmUiCiAgICApCgogICAgbG9nICJTY2FubmluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggYXpzZWNkICR7Y29uZmlnc1sqXX0iCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBzY2FuIGluICR7Y29uZmlnc1tAXX07IGRvCiAgICAgICAgbG9nICJTY2FubmluZyBjb25maWcgZmlsZSAkc2NhbiBub3ciCiAgICAgICAgL3Vzci9sb2NhbC9iaW4vYXpzZWNkIGNvbmZpZyAtcyAiJHNjYW4iIC1kIFAxRAogICAgZG9uZQp9CgojIGNyZWF0ZV9yZXF1aXJlZF9kaXJzCmNyZWF0ZV9yZXF1aXJlZF9kaXJzKCkgewogICAgY3JlYXRlX2RpcnM9KAogICAgICAgIC92YXIvbG9nL2pvdXJuYWwKICAgICAgICAvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZQogICAgICAgICMgRG9lcyBub3QgZXhpc3Qgb24gZGV2UHJveHlWTVNTCiAgICAgICAgL3Zhci9vcHQvbWljcm9zb2Z0L2xpbnV4bW9uYWdlbnQKICAgICkKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBkIGluICR7Y3JlYXRlX2RpcnNbQF19OyBkbwogICAgICAgIGxvZyAiQ3JlYXRpbmcgZGlyZWN0b3J5ICRkIgogICAgICAgIG1rZGlyIC1wICIkZCIgfHwgYWJvcnQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICRkIgogICAgZG9uZQp9CgojIGNyZWF0ZV9wb2RtYW5fbmV0d29ya3MoKQojIGFyZ3M6CiMgMSkgbmV0cyAtIG5hbWVyZWYsIGFzc29jaWF0aXZlIGFycmF5OyBOZXR3b3JrcyB0byBiZSBjcmVhdGVkCiMgICAgICAgS2V5IGlzIHRoZSBuZXR3b3JrIG5hbWUsIHZhbHVlIGlzIHRoZSBzdWJuZXQgd2l0aCBjaWRyIG5vdGF0aW9uCmNyZWF0ZV9wb2RtYW5fbmV0d29ya3MoKSB7CiAgICBsb2NhbCAtbiBuZXRzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3IgbiBpbiAkeyFuZXRzW0BdfTsgZG8KICAgICAgICBsb2cgIkNyZWF0aW5nIHBvZG1hbiBuZXR3b3JrIFwiJG5cIiB3aXRoIHN1Ym5ldCBcIiR7bmV0c1skbl19XCIiCiAgICAgICAgcG9kbWFuIG5ldHdvcmsgXAogICAgICAgICAgICBjcmVhdGUgXAogICAgICAgICAgICAtLXN1Ym5ldCAiJHtuZXRzWyIkbiJdfSIgXAogICAgICAgICAgICAiJG4iCiAgICBkb25lCn0KCiMgZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kCmZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZCgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9nICJDaGFuZ2luZyBmaXJld2FsbGQgYmFja2VuZCB0byBpcHRhYmxlcyIKICAgIGNvbmZfZmlsZT0iL2V0Yy9maXJld2FsbGQvZmlyZXdhbGxkLmNvbmYiCiAgICBzZWQgLWkgJ3MvRmlyZXdhbGxCYWNrZW5kPW5mdGFibGVzL0ZpcmV3YWxsQmFja2VuZD1pcHRhYmxlcy9nJyAiJGNvbmZfZmlsZSIKfQoKIyBmaXJld2FsbGRfY29uZmlndXJlCiMgYXJnczoKIyAxKSBwb3J0cyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheTsgcG9ydHMgdG8gYmUgZW5hYmxlZC4KIyAgICAgICBQb3J0cyBtdXN0IGJlIHBvc3RmaXhlZCB3aXRoIC90Y3Agb3IgL3VkcApmaXJld2FsbGRfY29uZmlndXJlKCkgewogICAgbG9jYWwgLW4gcG9ydHM9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBzZXJ2aWNlPSgKICAgICAgICAiZmlyZXdhbGxkIgogICAgKQogICAgZW5hYmxlX3NlcnZpY2VzIHNlcnZpY2UKCiAgICBsb2cgIkVuYWJsaW5nIHBvcnRzICR7cG9ydHNbKl19IG9uIGRlZmF1bHQgZmlyZXdhbGxkIHpvbmUiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBwb3J0IGluICR7cG9ydHNbQF19OyBkbwogICAgICAgIGxvZyAiRW5hYmxpbmcgcG9ydCAkcG9ydCBub3ciCiAgICAgICAgZmlyZXdhbGwtY21kICItLWFkZC1wb3J0PSRwb3J0IiBcCiAgICAgICAgICAgICAgICAgICAgIC0tcGVybWFuZW50CiAgICBkb25lCgogICAgbG9nICJXcml0aW5nIHJ1bnRpbWUgY29uZmlnIHRvIHBlcm1hbmVudCBjb25maWciCiAgICBmaXJld2FsbC1jbWQgLS1ydW50aW1lLXRvLXBlcm1hbmVudAp9CgojU3RhcnQgb2YgZ2F0ZXdheVZNU1Muc2gKIyEvYmluL2Jhc2gKCnNldCAtbyBlcnJleGl0IFwKICAgIC1vIHBpcGVmYWlsIFwKICAgIC1vIG5vdW5zZXQKCm1haW4oKSB7CiAgICAjIHRyYW5zYWN0aW9uIGF0dGVtcHQgcmV0cnkgdGltZSBpbiBzZWNvbmRzCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yaSByZXRyeV93YWl0X3RpbWU9MzAKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgbG9jYWwgLXJpIHBrZ19yZXRyeV9jb3VudD02MAoKICAgIGNyZWF0ZV9yZXF1aXJlZF9kaXJzCiAgICBjb25maWd1cmVfc3NoZAogICAgY29uZmlndXJlX3JwbV9yZXBvcyByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLWFyIGV4Y2x1ZGVfcGtncz0oCiAgICAgICAgIi14IFdBTGludXhBZ2VudCIKICAgICAgICAiLXggV0FMaW51eEFnZW50LXVkZXYiCiAgICApCgogICAgZG5mX3VwZGF0ZV9wa2dzIGV4Y2x1ZGVfcGtncyBcCiAgICAgICAgICAgICAgICAgICAgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAiJHBrZ19yZXRyeV9jb3VudCIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBpbnN0YWxsX3BrZ3M9KAogICAgICAgIGF6dXJlLWNsaQogICAgICAgIGNsYW1hdgogICAgICAgIGF6c2VjLWNsYW1hdgogICAgICAgIGF6dXJlLWNsaQogICAgICAgIGF6dXJlLW1kc2QKICAgICAgICBhenVyZS1zZWN1cml0eQogICAgICAgIHBvZG1hbgogICAgICAgIHBvZG1hbi1kb2NrZXIKICAgICAgICBvcGVuc3NsLXBlcmwKICAgICAgICAjIGhhY2sgLSB3ZSBhcmUgaW5zdGFsbGluZyBweXRob24zIG9uIGhvc3RzIGR1ZSB0byBhbiBpc3N1ZSB3aXRoIEF6dXJlIExpbnV4IEV4dGVuc2lvbnMgaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlL2F6dXJlLWxpbnV4LWV4dGVuc2lvbnMvcHVsbC8xNTA1CiAgICAgICAgcHl0aG9uMwogICAgICAgICMgcmVxdWlyZWQgZm9yIHBvZG1hbiBuZXR3b3JraW5nCiAgICAgICAgZmlyZXdhbGxkCiAgICAgICAgIyBSZXF1aXJlZCB0byBlbmFibGUgZmlwcwogICAgICAgIGdydWJieQogICAgICAgIGRyYWN1dC1maXBzCiAgICAgICAgZHJhY3V0LWZpcHMKICAgICkKCiAgICBkbmZfaW5zdGFsbF9wa2dzIGluc3RhbGxfcGtncyBcCiAgICAgICAgICAgICAgICAgICAgIHJldHJ5X3dhaXRfdGltZSBcCiAgICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgogICAgCiAgICBmaXBzX2NvbmZpZ3VyZQoKICAgICMgVE9ETyByZW1vdmUgdGhpcyBvbmNlIE1pY3Jvc29mdENCTE1hcmluZXI6Y2JsLW1hcmluZXI6Y2JsLW1hcmluZXItMi1nZW4yLWZpcHMgc3VwcG9ydHMgYXV0b21hdGljIHVwZGF0ZXMKICAgICMgUmVmZXJlbmNlOiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMtYXV0b21hdGljLXVwZ3JhZGUjc3VwcG9ydGVkLW9zLWltYWdlcwogICAgY29uZmlndXJlX2RuZl9jcm9uX2pvYgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjExOQogICAgY29uZmlndXJlX2xvZ3JvdGF0ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNCBkaXNhYmxlPVNDMjE1MwogICAgbG9jYWwgLXIgbWRtaW1hZ2U9IiR7UlBJTUFHRSUlLyp9LyR7TURNSU1BR0UjKi99IgogICAgbG9jYWwgLXIgcnBpbWFnZT0iJFJQSU1BR0UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGZsdWVudGJpdF9pbWFnZT0iJEZMVUVOVEJJVElNQUdFIgogICAgIyB2YWx1ZXMgYXJlIHJlZmVyZW5jZXMgdG8gdmFyaWFibGVzLCB0aGV5IHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkIGhlcmUKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJBIGFyb19pbWFnZXM9KAogICAgICAgIFsibWRtIl09Im1kbWltYWdlIgogICAgICAgIFsicnAiXT0icnBpbWFnZSIKICAgICAgICBbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfaW1hZ2UiCiAgICApCgogICAgcHVsbF9jb250YWluZXJfaW1hZ2VzIGFyb19pbWFnZXMKCiAgICBsb2NhbCAtciBhcm9fbmV0d29yaz0iYXJvIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtckEgbmV0d29ya3M9KAogICAgICAgIFsiJGFyb19uZXR3b3JrIl09IjE5Mi4xNjguMjU0LjAvMjQiCiAgICApCiAgICBjcmVhdGVfcG9kbWFuX25ldHdvcmtzIG5ldHdvcmtzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmEgZW5hYmxlX3BvcnRzPSgKICAgICAgICAjIFJQIGdhdGV3YXkKICAgICAgICAiODAvdGNwIgogICAgICAgICI4MDgxL3RjcCIKICAgICAgICAiNDQzL3RjcCIKICAgICAgICAjIEpJVCBzc2gKICAgICAgICAiMjIvdGNwIgogICAgKQoKICAgIGZpcmV3YWxsZF9jb25maWd1cmUgZW5hYmxlX3BvcnRzCgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZmx1ZW50Yml0X2NvbmZfZmlsZT0iW0lOUFVUXQogICAgTmFtZSBzeXN0ZW1kCiAgICBUYWcgam91cm5hbGQKICAgIFN5c3RlbWRfRmlsdGVyIF9DT01NPWFybwogICAgREIgL3Zhci9saWIvZmx1ZW50L2pvdXJuYWxkYgoKW0ZJTFRFUl0KCU5hbWUgbW9kaWZ5CglNYXRjaCBqb3VybmFsZAoJUmVtb3ZlX3dpbGRjYXJkIF8KCVJlbW92ZSBUSU1FU1RBTVAKCltPVVRQVVRdCglOYW1lIGZvcndhcmQKCU1hdGNoICoKCVBvcnQgMjkyMzAiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGU9IkFDUl9SRVNPVVJDRV9JRD0nJEFDUlJFU09VUkNFSUQnCkRBVEFCQVNFX0FDQ09VTlRfTkFNRT0nJERBVEFCQVNFQUNDT1VOVE5BTUUnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPScke3JvbGVfZ2F0ZXdheV59JwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9GRUFUVVJFUz0nJEdBVEVXQVlGRUFUVVJFUycKUlBJTUFHRT0nJHJwaW1hZ2UnIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRzZF9jb25maWdfdmVyc2lvbj0iJEdBVEVXQVlNRFNEQ09ORklHVkVSU0lPTiIKCiAgICAjIHZhbHVlcyBhcmUgcmVmZXJlbmNlcyB0byB2YXJpYWJsZXMsIHRoZXkgc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgaGVyZQogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtckEgYXJvX2NvbmZpZ3M9KAogICAgICAgIFsiZ2F0ZXdheV9jb25maWciXT0iYXJvX2dhdGV3YXlfY29uZl9maWxlIgogICAgICAgIFsiZmx1ZW50Yml0Il09ImZsdWVudGJpdF9jb25mX2ZpbGUiCiAgICAgICAgWyJtZHNkIl09Im1kc2RfY29uZmlnX3ZlcnNpb24iCiAgICAgICAgWyJuZXR3b3JrIl09ImFyb19uZXR3b3JrIgogICAgKQoKICAgIGNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlcyByb2xlX2dhdGV3YXkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb19pbWFnZXMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb19jb25maWdzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmEgZ2F0ZXdheV9zZXJ2aWNlcz0oCiAgICAgICAgImFyby1nYXRld2F5IgogICAgICAgICJhenNlY2QiCiAgICAgICAgIm1kc2QiCiAgICAgICAgIm1kbSIKICAgICAgICAiY2hyb255ZCIKICAgICAgICAiZmx1ZW50Yml0IgogICAgICAgICJkb3dubG9hZC1tZHNkLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICJkb3dubG9hZC1tZG0tY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgImZpcmV3YWxsZCIKICAgICkKCiAgICBlbmFibGVfc2VydmljZXMgZ2F0ZXdheV9zZXJ2aWNlcwoKICAgIHJlYm9vdF92bQp9CgpleHBvcnQgQVpVUkVfQ0xPVURfTkFNRT0iJHtBWlVSRUNMT1VETkFNRTo/IkZhaWxlZCB0byBjYXJyeSBvdmVyIHZhcmlhYmxlcyJ9IgoKIyB1dGlsLnNoIGRvZXMgbm90IGV4aXN0IHdoZW4gZGVwbG95ZWQgdG8gVk1TUyB2aWEgVk1TUyBleHRlbnNpb25zCiMgVGhpcyBpcyBiZWNhdXNlIGNvbW1vblZNU1Muc2ggaXMgY29uY2F0ZW5hdGVkIHdpdGggdGhpcyBzY3JpcHQKdXRpbD0idXRpbC5zaCIKaWYgWyAtZiAiJHV0aWwiIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC5zaAogICAgc291cmNlICIkdXRpbCIKZmkKCm1haW4gIiRAIgo=')))]" + "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','GATEWAYMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayMdsdConfigVersion')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayFeatures')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','MDMIMAGE=''/distroless/genevamdm:2.2024.626.1539-d1a6e7-20240715t0935@sha256:372fbc981bbfdf2b9a9d0ffdca2c51ed389b291a3bcff0401e9afb0c01605823''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('IyEvYmluL2Jhc2gKIyBJbnRlcm5hbCBGdW5jdGlvbnMgYW5kIENvbnN0YW50cwoKIyBlbXB0eV9zdHIgLSBjb25zdGFudDsgdXNlZCBieSBmdW5jdGlvbnMgZm9yIG9wdGlvbmFsIG5hbWVyZWYgc3RyaW5nIGFyZ3VlbWVudHMKIyBlbXB0eV9zdHI9IiIKIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CmRlY2xhcmUgLXIgZW1wdHlfc3RyPSIiCgojIHJvbGVfZ2F0ZXdheSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHRoaXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkgc2NyaXB0cyBzb3VyY2luZyB0aGlzIGZpbGUKIyByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9nYXRld2F5PSJnYXRld2F5IgojIHJvbGVfcnAgLSBjb25zdGFudDsgSXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggVk1TUyBpcyBiZWluZyBib290c3RyYXBwZWQKIyB0aGlzIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5IHNjcmlwdHMgc291cmNpbmcgdGhpcyBmaWxlCiMgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCiMgcm9sZV9kZXZwcm94eSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgpkZWNsYXJlIC1yIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgoKIyBsb2cgaXMgYSB3cmFwcGVyIGZvciBlY2hvIHRoYXQgaW5jbHVkZXMgdGhlIGZ1bmN0aW9uIG5hbWUKIyBBcmdzCiMgMSkgbXNnIC0gc3RyaW5nCiMgMikgc3RhY2tfbGV2ZWwgLSBpbnQ7IG9wdGlvbmFsLCBkZWZhdWx0cyB0byB0aGUgZnVuY3Rpb24gYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2FsbCBzdGFjawpsb2coKSB7CiAgICBsb2NhbCAtciBtc2c9IiR7MTotImxvZyBtZXNzYWdlIGlzIGVtcHR5In0iCiAgICBsb2NhbCAtciBzdGFja19sZXZlbD0iJHsyOi0xfSIKICAgIGVjaG8gIiR7RlVOQ05BTUVbJHtzdGFja19sZXZlbH1dfTogJHttc2d9Igp9CgojIGFib3J0IGlzIGEgd3JhcHBlciBmb3IgbG9nIHRoYXQgZXhpdHMgd2l0aCBhbiBlcnJvciBjb2RlCmFib3J0KCkgewogICAgbG9jYWwgLXJpIG9yaWdpbl9zdGFja2xldmVsPTIKICAgIGxvZyAiJHsxfSIgIiRvcmlnaW5fc3RhY2tsZXZlbCIKICAgIGxvZyAiRXhpdGluZyIKICAgIGV4aXQgMQp9CgojIHdyaXRlX2ZpbGUKIyBBcmdzCiMgMSkgZmlsZW5hbWUgLSBzdHJpbmcKIyAyKSBmaWxlX2NvbnRlbnRzIC0gc3RyaW5nCiMgMykgY2xvYmJlciAtIGJvb2xlYW47IG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gZmFsc2UKd3JpdGVfZmlsZSgpIHsKICAgIGxvY2FsIC1uIGZpbGVuYW1lPSIkMSIKICAgIGxvY2FsIC1uIGZpbGVfY29udGVudHM9IiQyIgogICAgbG9jYWwgLXIgY2xvYmJlcj0iJHszOi1mYWxzZX0iCgogICAgaWYgJGNsb2JiZXI7IHRoZW4KICAgICAgICBsb2cgIk92ZXJ3cml0aW5nIGZpbGUgJGZpbGVuYW1lIgogICAgICAgIGVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+ICIkZmlsZW5hbWUiCiAgICBlbHNlCiAgICAgICAgbG9nICJBcHBlbmRpbmcgdG8gJGZpbGVuYW1lIgogICAgICAgIGVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+PiAiJGZpbGVuYW1lIgogICAgZmkKfQoKIyByZXRyeSBBZGRpbmcgcmV0cnkgbG9naWMgdG8geXVtIGNvbW1hbmRzIGluIG9yZGVyIHRvIGF2b2lkIHN0YWxsaW5nIG91dCBvbiByZXNvdXJjZSBsb2NrcwojIGFyZ3M6CiMgMSkgY21kX3JldHJ5IC0gbmFtZXJlZiwgYXJyYXk7IENvbW1hbmQgYW5kIGFyZ3VlbWVudChzKSB0byByZXRyeQojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDMpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1tb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CnJldHJ5KCkgewogICAgbG9jYWwgLW4gY21kX3JldHJ5PSIkMSIKICAgIGxvY2FsIC1uIHdhaXRfdGltZT0iJDIiCiAgICBsb2NhbCAtcmkgcmV0cmllcz0iJHszOi01fSIKCiAgICAKICAgIGZvciBhdHRlbXB0IGluICQoc2VxIDEgJHJldHJpZXMpOyBkbwogICAgICAgIGxvZyAiYXR0ZW1wdCAjJHthdHRlbXB0fSAtICR7RlVOQ05BTUVbMl19IgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgICAgICR7Y21kX3JldHJ5W0BdfSAmCgogICAgICAgIHdhaXQgLWYgJCEgJiYgcmV0dXJuIDAKICAgICAgICBzbGVlcCAiJHdhaXRfdGltZSIKICAgIGRvbmUKCiAgICBhYm9ydCAiJHtjbWRfcmV0cnlbKl19IGZhaWxlZCBhZnRlciAjJHJldHJpZXMgYXR0ZW1wdHMiCn0KCiMgdmVyaWZ5X3JvbGUKIyBhcmdzOgojIDEpIHRlc3Rfcm9sZSAtIG5hbWVyZWY7IHJvbGUgYmVpbmcgdmVyaWZpZWQKIyAyKSBjZXJ0cyAtIGJvb2xlYW4sIG9wdGlvbmFsOyBkZWZhdWx0cyB0byBmYWxzZS4gU2V0IHRvIHRydWUgdG8gYWRkIGRldnByb3h5IHRvIGFsbG93ZWQgcm9sZXMKdmVyaWZ5X3JvbGUoKSB7CiAgICBsb2NhbCAtbiB0ZXN0X3JvbGU9IiQxIgogICAgbG9jYWwgLXIgY2VydHM9IiR7MjotZmFsc2V9IgoKICAgIGFsbG93ZWRfcm9sZXNfZ2xvYj0iKCRyb2xlX3JwfCRyb2xlX2dhdGV3YXkpIgogICAgaWYgJGNlcnRzOyB0aGVuCiAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgIikiIGFuZCBhcHBlbmQgYWRkaXRpb25hbCByb2xlCiAgICAgICAgYWxsb3dlZF9yb2xlc19nbG9iPSIke2FsbG93ZWRfcm9sZXNfZ2xvYiVcKSp9fCRyb2xlX2RldnByb3h5KSIKICAgIGZpCgogICAgaWYgW1sgIiR0ZXN0X3JvbGUiID1+ICRhbGxvd2VkX3JvbGVzX2dsb2IgXV07IHRoZW4KICAgICAgICBsb2cgIlZlcmlmaWVkIHJvbGUgXCIkdGVzdF9yb2xlXCIiCiAgICBlbHNlCiAgICAgICAgYWJvcnQgImZhaWxlZCB0byB2ZXJpZnkgcm9sZSwgcm9sZSBcIiR7dGVzdF9yb2xlfVwiIG5vdCBpbiBcIiR7YWxsb3dlZF9yb2xlc19nbG9ifVwiIgogICAgZmkKfQoKIyBnZXRfa2V5dmF1bHRfc3VmZml4CiMgYXJnczoKIyAxKSBybCAtIG5hbWVyZWYsIHN0cmluZzsgcm9sZSB0byBnZXQgc2hvcnQgcm9sZSBmb3IKIyAyKSBrdl9zdWZmaXggLSBuYW1lcmVmLCBzdHJpbmc7IHNob3J0IHJvbGUgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGlzIG5hbWVyZWYKIyAzKSBzZWNfcHJlZml4IC0gbmFtZXJlZiwgc3RyaW5nOyBrZXl2YXVsdCBjZXJ0aWZpY2F0ZSBwcmVmaXggd2lsbCBiZSBhc3NpZ25lZCB0byB0aGlzIG5hbWVyZWYKZ2V0X2tleXZhdWx0X3N1ZmZpeCgpIHsKICAgIGxvY2FsIC1uIHJsPSIkMSIKICAgIGxvY2FsIC1uIGt2X3N1ZmZpeD0iJDIiCiAgICBsb2NhbCAtbiBzZWNfcHJlZml4PSIkMyIKCiAgICBsb2NhbCAtciBrZXl2YXVsdF9zdWZmaXhfcnA9InN2YyIKICAgIGxvY2FsIC1yIGtleXZhdWx0X3ByZWZpeF9nYXRld2F5PSJnd3kiCgogICAgY2FzZSAiJHJsIiBpbgogICAgICAgICIkcm9sZV9nYXRld2F5IikKICAgICAgICAgICAga3Zfc3VmZml4PSIka2V5dmF1bHRfcHJlZml4X2dhdGV3YXkiCiAgICAgICAgICAgIHNlY19wcmVmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKICAgICAgICAgICAgOzsKICAgICAgICAiJHJvbGVfcnAiKQogICAgICAgICAgICBrdl9zdWZmaXg9IiRrZXl2YXVsdF9zdWZmaXhfcnAiCiAgICAgICAgICAgIHNlY19wcmVmaXg9IiRyb2xlX3JwIgogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIGFib3J0ICJ1bmtvd24gcm9sZSAkcmwiCiAgICAgICAgICAgIDs7CiAgICBlc2FjCn0KCiMgcmVib290X3ZtIHJlc3RvcmVzIGNhbGxzIHNodXRkb3duIC1yIGluIGEgc3Vic2hlbGwKIyBSZWJvb3RzIHNob3VsZCBzY2hlZHVsZWQgYWZ0ZXIgYWxsIFZNIGV4dGVuc2lvbnMgaGF2ZSBoYWQgdGltZSB0byBjb21wbGV0ZQojIFJlZmVyZW5jZTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvZXh0ZW5zaW9ucy9jdXN0b20tc2NyaXB0LWxpbnV4I3RpcHMKcmVib290X3ZtKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICAoc2h1dGRvd24gLXIgbm93ICYpCn0KIyEvYmluL2Jhc2gKIyBSZXBvc2l0b3J5IGFuZCBwYWNrYWdlIG1hbmFnZW1lbnQgcmVsYXRlZCBmdW5jdGlvbnMKCmNvbmZpZ3VyZV9yZXBvX21hcmluZXJfZXh0ZW5kZWQoKSB7CiAgICBsb2NhbCAtciBleHRlbmRlZF9yZXBvX2NvbmZpZz0iaHR0cHM6Ly9wYWNrYWdlcy5taWNyb3NvZnQuY29tL2NibC1tYXJpbmVyLzIuMC9wcm9kL2V4dGVuZGVkL3g4Nl82NC9jb25maWcucmVwbyIKICAgIGN1cmwgLXNTTCAiJGV4dGVuZGVkX3JlcG9fY29uZmlnIiAtbyAvZXRjL3l1bS5yZXBvcy5kL21hcmluZXItZXh0ZW5kZWQucmVwbwoKICAgIGxvY2FsIC1yIHJlcG9fbmFtZT0iY2JsLW1hcmluZXIyLjBwcm9kZXh0ZW5kZWR4ODZfNjQiCgogICAgbG9jYWwgLXJhIGNtZD0oCiAgICAgICAgZG5mCiAgICAgICAgdXBkYXRlCiAgICAgICAgLXkKICAgICAgICAtLWVuYWJsZXJlcG89IiRyZXBvX25hbWUiCiAgICApCgogICAgbG9nICJFbmFibGluZyByZXBvICRyZXBvX25hbWUiCiAgICByZXRyeSBjbWQgIiQxIiAiJHsyOi19Igp9CgojIGNvbmZpZ3VyZV9ycG1fcmVwb3MKIyBOZXcgcmVwb3NpdG9yaWVzIHNob3VsZCBiZSBhZGRlZCBpbiB0aGVpciBvd24gZnVuY3Rpb25zLCBhbmQgY2FsbGVkIGhlcmUKIyBhcmdzOgojIDEpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDIpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKY29uZmlndXJlX3JwbV9yZXBvcygpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCAiJDEiICIkezI6LTF9Igp9CgojIGRuZl9pbnN0YWxsX3BrZ3MKIyBhcmdzOgojIDEpIHBrZ3MgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXk7IFBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDMpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKZG5mX2luc3RhbGxfcGtncygpIHsKICAgIGxvY2FsIC1uIHBrZ3M9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIC15CiAgICAgICAgaW5zdGFsbAogICAgKQogICAgCiAgICAjIFJlZmVyZW5jZTogaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIyMDYKICAgICMgYXBwZW5kIHBrZ3MgYXJyYXkgdG8gY21kCiAgICBtYXBmaWxlIC1PICQoKCAkeyNjbWRbQF19ICsgMSApKSAtZCAnICcgY21kIDw8PCAiJHtwa2dzW0BdfSIKICAgIGxvY2FsIC1yIGNtZAoKICAgIGxvZyAiQXR0ZW1wdGluZyB0byBpbnN0YWxsIHBhY2thZ2VzOiAke3BrZ3NbKl19IgogICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQoKCiMgZG5mX3VwZGF0ZV9wa2dzCiMgYXJnczoKIyAxKSBleGNsdWRlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheSwgb3B0aW9uYWw7IFBhY2thZ2VzIHRvIGV4Y2x1ZGUgZnJvbSB1cGRhdGluZwojICAgICAgIEVhY2ggaW5kZXggbXVzdCBiZSBwcmVmaXhlZCB3aXRoIC14IAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDMpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1tb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmRuZl91cGRhdGVfcGtncygpIHsKICAgIGxvY2FsIC1uIGV4Y2x1ZGVzPSIkezE6LWVtcHR5X3N0cn0iCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGxvY2FsIC1hIGNtZD0oCiAgICAgICAgZG5mCiAgICAgICAgLXkKICAgICAgICAjIFJlcGxhY2VkIHdpdGggZXhjbHVkZXMKICAgICAgICAiIgogICAgICAgIHVwZGF0ZQogICAgICAgIC0tYWxsb3dlcmFzaW5nCiAgICApCgogICAgaWYgWyAtbiAiJHtleGNsdWRlc30iIF07IHRoZW4KICAgICAgICAjIFJlZmVyZW5jZSBodHRwczovL3d3dy5zaGVsbGNoZWNrLm5ldC93aWtpL1NDMjIwNgogICAgICAgIG1hcGZpbGUgLU8gMiBjbWQgPDw8ICIke2V4Y2x1ZGVzW0BdfSIKICAgIGVsc2UKICAgICAgICAjIFJlbW92ZSBlbXB0eSBzdHJpbmcgaWYgd2UgYXJlbid0IHJlcGxhY2luZyB0aGVtLCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciwgYnV0IHdoeSBub3QgYmUgc2FmZQogICAgICAgIHVuc2V0ICJjbWRbMl0iCiAgICBmaQogICAgbG9jYWwgLXIgY21kCgogICAgbG9nICJVcGRhdGluZyBhbGwgcGFja2FnZXMgZXhjbHVkaW5nIFwiJHtleGNsdWRlc1sqXTotfVwiIgogICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQoKIyBjb25maWd1cmVfZG5mX2Nyb25fam9iCiMgY3JlYXRlIGNyb24gam9iIHRvIGF1dG8gdXBkYXRlIHJwbSBwYWNrYWdlcwpjb25maWd1cmVfZG5mX2Nyb25fam9iKCkgewogICAgbG9nICJzdGFydGluZyIKICAgIGxvY2FsIC1yIGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZW5hbWU9Jy9ldGMvY3Jvbi53ZWVrbHkvZG5mdXBkYXRlJwogICAgbG9jYWwgLXIgY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlPSIjIS9iaW4vYmFzaApkbmYgdXBkYXRlIC15IgoKICAgIHdyaXRlX2ZpbGUgY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlbmFtZSBjcm9uX3dlZWtseV9kbmZfdXBkYXRlX2ZpbGUgdHJ1ZQogICAgY2htb2QgdSt4ICIkY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlbmFtZSIKfQoKIyBycG1faW1wb3J0X2tleXMKIyBhcmdzOgojIDEpIGtleXMgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXk7IHJwbSBrZXlzIHRvIGJlIGltcG9ydGVkCiMgMikgd2FpdF90aW1lIC0gbmFtZXJlZiwgaW50ZWdlcjsgVGltZSB0byB3YWl0IGJlZm9yZSByZXRyeWluZyBjb21tYW5kCnJwbV9pbXBvcnRfa2V5cygpIHsKICAgIGxvY2FsIC1uIGtleXM9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBrZXkgaW4gJHtrZXlzW0BdfTsgZG8KICAgICAgICBpZiBbICR7I2tleXNbQF19IC1lcSAwIF07IHRoZW4KICAgICAgICAgICAgYnJlYWsKICAgICAgICBmaQoKICAgICAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgICAgICBycG0KICAgICAgICAgICAgLS1pbXBvcnQKICAgICAgICAgICAgLXYKICAgICAgICAgICAgIiRrZXkiCiAgICAgICAgKQoKICAgICAgICBsb2cgIkltcG9ydGluZyBycG0gcmVwb3NpdG9yeSBrZXkgJGtleSIKICAgICAgICByZXRyeSBjbWQgIiQyIiAiJHszOi19IiAmJiB1bnNldCBrZXkKICAgIGRvbmUKfQoKIyB1dGlsLWNvbW1vbi5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1jb21tb24uc2gKICAgIHNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQojIS9iaW4vYmFzaAojIEFSTyBzZXJ2aWNlIHNldHVwIGZ1bmN0aW9ucwoKIyBlbmFibGVfc2VydmljZXMgZW5hYmxlcyB0aGUgc3lzdGVtZCBzZXJ2aWNlcyB0aGF0IGFyZSBwYXNzZWQgaW4KIyBhcmdzOgojIDEpIHNlcnZpY2VzIC0gYXJyYXk7IHNlcnZpY2VzIHRvIGJlIGVuYWJsZWQKZW5hYmxlX3NlcnZpY2VzKCkgewogICAgbG9jYWwgLW4gc3Zjcz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCgogICAgbG9nICJlbmFibGluZyBzZXJ2aWNlcyAke3N2Y3NbKl19IgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Igc3ZjIGluICR7c3Zjc1tAXX07IGRvCiAgICAgICAgbG9nICJFbmFibGluZyBhbmQgc3RhcnRpbmcgJHN2YyBub3ciCiAgICAgICAgc3lzdGVtY3RsIGVuYWJsZSBcCiAgICAgICAgICAgICAgICAgIC0tbm93IFwKICAgICAgICAgICAgICAgICAgIiRzdmMiCiAgICBkb25lCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBjb250YWluZXIgaW1hZ2UKIyAyKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBWTVNTIHJvbGUKIyAzKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBnYXRld2F5IGVudmlyb25tZW50IGZpbGUKIyA0KSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5KCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gcm9sZT0iJDIiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDQiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tZ2F0ZXdheSBzZXJ2aWNlIgoKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1nYXRld2F5JwoKICAgIHdyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tZ2F0ZXdheS5zZXJ2aWNlJwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0ke2Fyb19nYXRld2F5X2NvbmZfZmlsZW5hbWV9CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9GRUFUVVJFUyBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JG5ldHdvcmsgXAogIC1wIDgwOjgwODAgXAogIC1wIDgwODE6ODA4MSBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogICR7cm9sZSwsfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgICIKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWUgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fcnAKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBWTVNTIHJvbGUKIyAzKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgNCkgbmV0d29yayAtIG5hbWVyZWYsIHN0cmluZzsgcG9kbWFuIG5ldHdvcmsgbmFtZSB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fcnAoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiByb2xlPSIkMiIKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkNCIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1ycCBzZXJ2aWNlIgoKICAgIGxvY2FsIC1yIGFyb19ycF9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcnAnCgogICAgd3JpdGVfZmlsZSBhcm9fcnBfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXJwLnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPSR7YXJvX3JwX2NvbmZfZmlsZW5hbWV9CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFSTV9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFaVVJFX0FSTV9DTElFTlRfSUQgXAogIC1lIEFaVVJFX0ZQX0NMSUVOVF9JRCBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBDTFVTVEVSX01EU0RfTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtcCA0NDM6ODQ0MyBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogICR7cm9sZSwsfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBhcm9fcnBfc2VydmljZV9maWxlbmFtZSBhcm9fcnBfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvcgojIGFyZ3M6CiMgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IFJQIGNvbnRhaW5lciBpbWFnZQojIDIpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1tb25pdG9yIHNlcnZpY2UiCgogICAgIyBET01BSU5fTkFNRSwgQ0xVU1RFUl9NRFNEX0FDQ09VTlQsIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiwgR0FURVdBWV9ET01BSU5TLCBHQVRFV0FZX1JFU09VUkNFR1JPVVAsIE1EU0RfRU5WSVJPTk1FTlQgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRQogICAgIyBhcmUgbm90IHVzZWQsIGJ1dCBjYW4ndCBlYXNpbHkgYmUgcmVmYWN0b3JlZCBvdXQuIFNob3VsZCBiZSByZXZpc2l0ZWQgaW4gdGhlIGZ1dHVyZS4KICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tbW9uaXRvcicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkRPTUFJTl9OQU1FPSckTE9DQVRJT04uJENMVVNURVJQQVJFTlRET01BSU5OQU1FJwpDTFVTVEVSX01EU0RfQUNDT1VOVD0nJENMVVNURVJNRFNEQUNDT1VOVCcKQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OPSckQ0xVU1RFUk1EU0RDT05GSUdWRVJTSU9OJwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9SRVNPVVJDRUdST1VQPSckR0FURVdBWVJFU09VUkNFR1JPVVBOQU1FJwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpDTFVTVEVSX01EU0RfTkFNRVNQQUNFPSckQ0xVU1RFUk1EU0ROQU1FU1BBQ0UnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPUJCTQpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpLRVlWQVVMVF9QUkVGSVg9JyRLRVlWQVVMVFBSRUZJWCcKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9QkJNClJQSU1BR0U9JyRpbWFnZSciCgogICAgd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbW9uaXRvci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1tb25pdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1tIDIuNWcgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogIG1vbml0b3IKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbAojIGFyZ3M6CiMgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IFJQIGNvbnRhaW5lciBpbWFnZQojIDIpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIG5ldHdvcms9IiQyIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvIHBvcnRhbCBzZXJ2aWNlIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTPSckUE9SVEFMQUNDRVNTR1JPVVBJRFMnCkFaVVJFX1BPUlRBTF9DTElFTlRfSUQ9JyRQT1JUQUxDTElFTlRJRCcKQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUz0nJFBPUlRBTEVMRVZBVEVER1JPVVBJRFMnCkRBVEFCQVNFX0FDQ09VTlRfTkFNRT0nJERBVEFCQVNFQUNDT1VOVE5BTUUnCktFWVZBVUxUX1BSRUZJWD0nJEtFWVZBVUxUUFJFRklYJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT1Qb3J0YWwKUE9SVEFMX0hPU1ROQU1FPSckTE9DQVRJT04uYWRtaW4uJFJQUEFSRU5URE9NQUlOTkFNRScKUlBJTUFHRT0nJGltYWdlJyIKCiAgICB3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1wb3J0YWwuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JG5ldHdvcmsgXAogIC1lIEFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTIFwKICAtZSBBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIFBPUlRBTF9IT1NUTkFNRSBcCiAgLW0gMmcgXAogIC1wIDQ0NDo4NDQ0IFwKICAtcCAyMjIyOjIyMjIgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogIHBvcnRhbApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfbWRzZAojIGFyZ3M6CiMgMSkgbW9uaXRvcmluZ19yb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBjYW4gYmUgImdhdGV3YXkiIG9yICJycCIKIyAyKSBtb25pdG9yX2NvbmZpZ192ZXJzaW9uIC0gbmFtZXJlZiwgc3RyaW5nOyBtZHNkIGNvbmZpZyB2ZXJzaW9uCmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QoKSB7CiAgICBsb2NhbCAtbiByb2xlPSIkMSIKICAgIGxvY2FsIC1uIG1vbml0b3JfY29uZmlnX3ZlcnNpb249IiQyIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiY29uZmlndXJpbmcgbWRzZCBzZXJ2aWNlIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICBsb2NhbCAtciBtZHNkX3NlcnZpY2VfZGlyPSIvZXRjL3N5c3RlbWQvc3lzdGVtL21kc2Quc2VydmljZS5kIgogICAgbWtkaXIgLXAgIiRtZHNkX3NlcnZpY2VfZGlyIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lPSIkbWRzZF9zZXJ2aWNlX2Rpci9vdmVycmlkZS5jb25mIgogICAgbG9jYWwgLXIgbWRzZF9jZXJ0aWZpY2F0ZV9zYW49IiQob3BlbnNzbCB4NTA5IC1pbiAvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbSAtbm9vdXQgLXN1YmplY3QgfCBzZWQgLWUgJ3MvLipDTiA9IC8vJykiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlbmFtZT0iL2V0Yy9kZWZhdWx0L21kc2QiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlPSJNRFNEX1JPTEVfUFJFRklYPS92YXIvcnVuL21kc2QvZGVmYXVsdApNRFNEX09QVElPTlM9XCItQSAtZCAtciBcJE1EU0RfUk9MRV9QUkVGSVhcIgoKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfQUNDT1VOVD0nJFJQTURTREFDQ09VTlQnCmV4cG9ydCBNT05JVE9SSU5HX0dDU19SRUdJT049JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSURfVFlQRT1BdXRoS2V5VmF1bHQKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSUQ9JyRtZHNkX2NlcnRpZmljYXRlX3NhbicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX05BTUVTUEFDRT0nJFJQTURTRE5BTUVTUEFDRScKZXhwb3J0IE1PTklUT1JJTkdfQ09ORklHX1ZFUlNJT049JyRtb25pdG9yX2NvbmZpZ192ZXJzaW9uJwpleHBvcnQgTU9OSVRPUklOR19VU0VfR0VORVZBX0NPTkZJR19TRVJWSUNFPXRydWUKCmV4cG9ydCBNT05JVE9SSU5HX1RFTkFOVD0nJExPQ0FUSU9OJwpleHBvcnQgTU9OSVRPUklOR19ST0xFPSckcm9sZScKZXhwb3J0IE1PTklUT1JJTkdfUk9MRV9JTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIKCmV4cG9ydCBNRFNEX01TR1BBQ0tfU09SVF9DT0xVTU5TPVwiMVwiIgoKICAgIHdyaXRlX2ZpbGUgZGVmYXVsdF9tZHNkX2ZpbGVuYW1lIGRlZmF1bHRfbWRzZF9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQKIyBhcmdzOgojIDEpIGNvbmZfZmlsZSAtIHN0cmluZzsgZmx1ZW5iaXQgY29uZmlndXJhdGlvbiBmaWxlCiMgMikgaW1hZ2UgLSBzdHJpbmc7IGZsdWVudGJpdCBjb250YWluZXIgaW1hZ2UgdG8gcnVuCiMgMykgbmV0d29yayAtIG5hbWVyZWYsIHN0cmluZzsgcG9kbWFuIG5ldHdvcmsgbmFtZSB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQoKSB7CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZT0iJDIiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGZsdWVudGJpdCBzZXJ2aWNlIgoKICAgIG1rZGlyIC1wIC9ldGMvZmx1ZW50Yml0LwogICAgbWtkaXIgLXAgL3Zhci9saWIvZmx1ZW50CgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBjb25mX2ZpbGVuYW1lPScvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZicKICAgIHdyaXRlX2ZpbGUgY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19maWxlPSJGTFVFTlRCSVRJTUFHRT0kaW1hZ2UiCgogICAgd3JpdGVfZmlsZSBzeXNjb25maWdfZmlsZW5hbWUgc3lzY29uZmlnX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mbHVlbnRiaXQuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MAoKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2ZsdWVudGJpdApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1zZWN1cml0eS1vcHQgbGFiZWw9ZGlzYWJsZSBcCiAgLS1lbnRyeXBvaW50IC9vcHQvdGQtYWdlbnQtYml0L2Jpbi90ZC1hZ2VudC1iaXQgXAogIC0tbmV0PWhvc3QgXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtdiAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZjovZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZiBcCiAgLXYgL3Zhci9saWIvZmx1ZW50Oi92YXIvbGliL2ZsdWVudDp6IFwKICAtdiAvdmFyL2xvZy9qb3VybmFsOi92YXIvbG9nL2pvdXJuYWw6cm8gXAogIC12IC9ldGMvbWFjaGluZS1pZDovZXRjL21hY2hpbmUtaWQ6cm8gXAogICRpbWFnZSBcCiAgLWMgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYKCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9NQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgc2VydmljZV9maWxlbmFtZSBzZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QKIyBhcmdzOgojIDEpIHJvbGUgLSBzdHJpbmc7IGNhbiBiZSAiZ2F0ZXdheSIgb3IgInJwIgpjb25maWd1cmVfdGltZXJzX21kbV9tZHNkKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICBsb2NhbCBrZXl2YXVsdF9zdWZmaXggc2VjcmV0X3ByZWZpeAogICAgZ2V0X2tleXZhdWx0X3N1ZmZpeCByb2xlIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CgogICAgZm9yIHZhciBpbiAibWRzZCIgIm1kbSI7IGRvCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb3dubG9hZC0kdmFyLWNyZWRlbnRpYWxzLnNlcnZpY2UiCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCAkdmFyIgoKICAgICAgICB3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlIHRydWUKCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy50aW1lciIKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltUaW1lcl0KT25Cb290U2VjPTBtaW4KT25DYWxlbmRhcj0wLzEyOjAwOjAwCkFjY3VyYWN5U2VjPTVzCgpbSW5zdGFsbF0KV2FudGVkQnk9dGltZXJzLnRhcmdldCIKCiAgICAgICAgd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlIHRydWUKICAgIGRvbmUKCiAgICBsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWU9Ii91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZT0iIyEvYmluL2Jhc2gKc2V0IC1ldQoKQ09NUE9ORU5UPVwkMQplY2hvIFwiRG93bmxvYWQgXCRDT01QT05FTlQgY3JlZGVudGlhbHNcIgoKVEVNUF9ESVI9XCJcJChta3RlbXAgLWQpXCIKZXhwb3J0IEFaVVJFX0NPTkZJR19ESVI9XCJcJChta3RlbXAgLWQpXCIKCmVjaG8gXCJMb2dnaW5nIGludG8gQXp1cmUuLi5cIgpSRVRSSUVTPTMKd2hpbGUgW1sgXCRSRVRSSUVTIC1ndCAwIF1dOyBkbwogICAgaWYgYXogbG9naW4gLWkgLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zCiAgICB0aGVuCiAgICAgICAgZWNobyBcImF6IGxvZ2luIHN1Y2Nlc3NmdWxcIgogICAgICAgIGJyZWFrCiAgICBlbHNlCiAgICAgICAgZWNobyBcImF6IGxvZ2luIGZhaWxlZC4gUmV0cnlpbmcuLi5cIgogICAgICAgIGxldCBSRVRSSUVTLT0xCiAgICAgICAgc2xlZXAgNQogICAgZmkKZG9uZQoKdHJhcCBcImNsZWFudXBcIiBFWElUCgpjbGVhbnVwKCkgewogIGF6IGxvZ291dAogIFtbIFwkVEVNUF9ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRURU1QX0RJUgogIFtbIFwkQVpVUkVfQ09ORklHX0RJUiA9fiAvdG1wLy4rIF1dICYmIHJtIC1yZiBcJEFaVVJFX0NPTkZJR19ESVIKfQoKaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kbVwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvZXRjL21kbS5wZW1cIgplbGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICBDVVJSRU5UX0NFUlRfRklMRT1cIi92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlL21kc2QucGVtXCIKZWxzZQogIGVjaG8gSW52YWxpZCB1c2FnZSAmJiBleGl0IDEKZmkKClNFQ1JFVF9OQU1FPVwiJHNlY3JldF9wcmVmaXgtXCR7Q09NUE9ORU5UfVwiCk5FV19DRVJUX0ZJTEU9XCJcJFRFTVBfRElSL1wkQ09NUE9ORU5ULnBlbVwiCmZvciBhdHRlbXB0IGluIHsxLi41fTsgZG8KICBheiBrZXl2YXVsdCBcCiAgICBzZWNyZXQgXAogICAgZG93bmxvYWQgXAogICAgLS1maWxlIFwiXCRORVdfQ0VSVF9GSUxFXCIgXAogICAgLS1pZCBcImh0dHBzOi8vJEtFWVZBVUxUUFJFRklYLSRrZXl2YXVsdF9zdWZmaXguJEtFWVZBVUxURE5TU1VGRklYL3NlY3JldHMvXCRTRUNSRVRfTkFNRVwiIFwKICAgICYmIGJyZWFrCiAgaWYgW1sgXCRhdHRlbXB0IC1sdCA1IF1dOyB0aGVuIHNsZWVwIDEwOyBlbHNlIGV4aXQgMTsgZmkKZG9uZQoKaWYgWyAtZiBcJE5FV19DRVJUX0ZJTEUgXTsgdGhlbgogIGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICAgIGNob3duIHN5c2xvZzpzeXNsb2cgXCRORVdfQ0VSVF9GSUxFCiAgZWxzZQogICAgc2VkIC1pIC1uZSAnMSwvRU5EIENFUlRJRklDQVRFLyBwJyBcJE5FV19DRVJUX0ZJTEUKICBmaQoKICBuZXdfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJE5FV19DRVJUX0ZJTEVcIiAtbm9vdXQgLXNlcmlhbCB8IGF3ayAtRj0gJ3twcmludCBcJDJ9JylcIgogIGN1cnJlbnRfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJENVUlJFTlRfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBpZiBbWyAhIC16IFwkbmV3X2NlcnRfc24gXV0gJiYgW1sgXCRuZXdfY2VydF9zbiAhPSBcIlwkY3VycmVudF9jZXJ0X3NuXCIgXV07IHRoZW4KICAgIGVjaG8gdXBkYXRpbmcgY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UCiAgICBjaG1vZCAwNjAwIFwkTkVXX0NFUlRfRklMRQogICAgbXYgXCRORVdfQ0VSVF9GSUxFIFwkQ1VSUkVOVF9DRVJUX0ZJTEUKICBmaQplbHNlCiAgZWNobyBGYWlsZWQgdG8gcmVmcmVzaCBjZXJ0aWZpY2F0ZSBmb3IgXCRDT01QT05FTlQgJiYgZXhpdCAxCmZpIgoKICAgIHdyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlIHRydWUKCiAgICBjaG1vZCB1K3ggL3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2gKCiAgICAkZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kc2QgJgogICAgd2FpdCAiJCEiCgoKICAgICRkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgbWRtICYKICAgIHdhaXQgIiQhIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnNlcnZpY2UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1XYXRjaCBmb3IgY2hhbmdlcyBpbiBtZG0ucGVtIGFuZCByZXN0YXJ0cyB0aGUgbWRtIHNlcnZpY2UKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3IvYmluL3N5c3RlbWN0bCByZXN0YXJ0IG1kbS5zZXJ2aWNlCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGVuYW1lPScvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbS93YXRjaC1tZG0tY3JlZGVudGlhbHMucGF0aCcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZT0nW1BhdGhdClBhdGhNb2RpZmllZD0vZXRjL21kbS5wZW0KCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGUgdHJ1ZQoKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkcz0nd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCiAgICBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93ICIkd2F0Y2hfbWRtX2NyZWRzIiB8fCBhYm9ydCAiZmFpbGVkIHRvIGVuYWJsZSBhbmQgc3RhcnQgJHdhdGNoX21kbV9jcmVkcyIKfQoKIyBjb25maWd1cmVfc2VydmljZV9tZG0KIyBhcmdzOgojIDEpIHJvbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGNhbiBiZSAiZ2F0ZXdheSIgb3IgInJwIgojIDIpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBtZG0gY29udGFpbmVyIGltYWdlIHRvIHJ1bgojIDMpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfbWRtKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZT0iJDIiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIG1kbSBzZXJ2aWNlIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWU9Ii9ldGMvc3lzY29uZmlnL21kbSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX21kbV9maWxlPSJNRE1GUk9OVEVORFVSTD0nJE1ETUZST05URU5EVVJMJwpNRE1JTUFHRT0nJGltYWdlJwpNRE1TT1VSQ0VFTlZJUk9OTUVOVD0nJExPQ0FUSU9OJwpNRE1TT1VSQ0VST0xFPSckcm9sZScKTURNU09VUkNFUk9MRUlOU1RBTkNFPVwiJChob3N0bmFtZSlcIiIKCiAgICB3cml0ZV9maWxlIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWUgc3lzY29uZmlnX21kbV9maWxlIHRydWUKCiAgICBta2RpciAtcCAvdmFyL2V0dwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZG1fc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZG0uc2VydmljZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvbWRtCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWVudHJ5cG9pbnQgL3Vzci9zYmluL01ldHJpY3NFeHRlbnNpb24gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JG5ldHdvcmsgXAogIC1tIDJnIFwKICAtdiAvZXRjL21kbS5wZW06L2V0Yy9tZG0ucGVtIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogIC1DZXJ0RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Gcm9udEVuZFVybCAkTURNRlJPTlRFTkRVUkwgXAogIC1Mb2dnZXIgQ29uc29sZSBcCiAgLUxvZ0xldmVsIFdhcm5pbmcgXAogIC1Qcml2YXRlS2V5RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Tb3VyY2VFbnZpcm9ubWVudCAkTE9DQVRJT04gXAogIC1Tb3VyY2VSb2xlICRyb2xlIFwKICAtU291cmNlUm9sZUluc3RhbmNlICRIT1NUTkFNRQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lIG1kbV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlCiMgYXJnczoKIyAxKSByIC0gbmFtZXJlZiwgc3RyaW5nOyByb2xlIG9mIFZNU1MKIyAyKSBpbWFnZXMgLSBuYW1lcmVmLCBhc3NvY2lhdGl2ZSBhcnJheTsgQVJPIGNvbnRhaW5lciBpbWFnZXMKIyAzKSBjb25maWdzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHZlcnNpb25zLiBUaGUgdmFsdWVzIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byB2YXJpYWJsZXMsIG5vdCBkZXJlZmVyZW5jZWQuCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIHZhbHVlIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBuYW1lcmVmIHZhcmlhYmxlcyBieSBoZWxwZXIgZnVuY3Rpb25zLgpjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMoKSB7CiAgICBsb2NhbCAtbiByPSIkMSIKICAgIGxvY2FsIC1uIGltYWdlcz0iJDIiCiAgICBsb2NhbCAtbiBjb25maWdzPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICB2ZXJpZnlfcm9sZSAiJDEiCgogICAgaWYgWyAiJHIiID09ICIkcm9sZV9nYXRld2F5IiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJnYXRld2F5X2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgICAgICBjb25maWd1cmVfY2VydHNfZ2F0ZXdheQogICAgZWxpZiBbICIkciIgPT0gIiRyb2xlX3JwIiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwICIke2ltYWdlc1sicnAiXX0iICIkMSIgIiR7Y29uZmlnc1sicnBfY29uZmlnIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19tb25pdG9yICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgICAgIGNvbmZpZ3VyZV9jZXJ0c19ycAogICAgZmkKCiAgICBjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQgIiR7Y29uZmlnc1siZmx1ZW50Yml0Il19IiAiJHtpbWFnZXNbImZsdWVudGJpdCJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgIGNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QgIiQxIgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRtICIkMSIgIiR7aW1hZ2VzWyJtZG0iXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICBjb25maWd1cmVfc2VydmljZV9tZHNkICIkMSIgIiR7Y29uZmlnc1sibWRzZCJdfSIKICAgIHJ1bl9henNlY2RfY29uZmlnX3NjYW4KfQoKIyB1dGlsLWNvbW1vbi5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1jb21tb24uc2gKICAgIHNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQoKIyB1dGlsLXN5c3RlbS5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9zeXN0ZW09InV0aWwtc3lzdGVtLnNoIgppZiBbIC1mICIkdXRpbF9zeXN0ZW0iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1zeXN0ZW0uc2gKICAgIHNvdXJjZSAiJHV0aWxfc3lzdGVtIgpmaQojIS9iaW4vYmFzaAojIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBzb3VyY2VkIGJ5IGJvb3RzdHJhcHBpbmcgc2NyaXB0cyBmb3IgY29tbW9ubHkgdXNlZCBmdW5jdGlvbnMKCiMgZ2V0X2Jvb3RfZGV2X3V1aWQKIyBHZXQgdGhlIGJvb3QgZGV2aWNlcyB1dWlkCiMgYXJnczoKIyAxKSBib290X2Rldl91dWlkIC0gbmFtZXJlZiwgc3RyaW5nOyBFbXB0eSB2YXJpYWJsZSBmb3IgYm9vdCBkZXZpY2UgdXVpZCBhc3NpZ25tZW50CiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKZ2V0X2Jvb3RfZGV2X3V1aWQoKSB7CiAgICBsb2NhbCAtbiBib290X2Rldl91dWlkPSIkMSIKICAgICMgU2V0IGJvb3RfdXVpZCB2YXJpYWJsZSBmb3IgdGhlIGJvb3QgcGFydGl0aW9uIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByb290CiAgICBib290X2Rldj0iJChkZiAvYm9vdC8gfCB0YWlsIC0xIHwgY3V0IC1kJyAnIC1mMSkiCiAgICByb290X2Rldj0iJChkZiAvIHwgdGFpbCAtMSB8IGN1dCAtZCcgJyAtZjEpIgoKICAgIGJvb3RfZGV2X3V1aWQ9IiRyb290X2RldiIKICAgIGlmIFsgIiRib290X2RldiIgIT0gIiRyb290X2RldiIgXTsgdGhlbgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGJvb3RfZGV2X3V1aWQ9ImJvb3Q9VVVJRD0kKGJsa2lkICIkYm9vdF9kZXYiIC1zIFVVSUQgLW8gdmFsdWUpIgogICAgZmkKfQoKIyBmaXBzX3ZlcmlmeQojIFZlcmlmeSB0aGF0IGZpcHMgbW9kZSBpcyBlbmFibGVkCiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKZmlwc192ZXJpZnkoKSB7CiAgICBmaXBzX2VuYWJsZWRfcHJvYz0iJChjYXQgL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQpIgogICAgZmlwc19lbmFibGVkX3N5c2N0bD0iJChzeXNjdGwgLW4gY3J5cHRvLmZpcHNfZW5hYmxlZCkiCiAgICBpZiBbICIkZmlwc19lbmFibGVkX3Byb2MiIC1uZSAxIF0gfHwgWyAiJGZpcHNfZW5hYmxlZF9zeXNjdGwiIC1uZSAxIF07IHRoZW4KICAgICAgICBhYm9ydCAiRklQUyBtb2RlIGlzIGRpc2FibGVkIgogICAgZmkKCiAgICBsb2cgIkZJUFMgbW9kZSBpcyBlbmFibGVkIgp9CgojIGZpcHNfY29uZmlndXJlCiMgQ29uZmlndXJlcyBWTSB0byBydW4gd2l0aCBmaXBzIG1vZGUgZW5hYmxlZAojIFRha2VuIGFuZCByZWZhY3RvcmVkIGZyb20gaHR0cHM6Ly9lbmcubXMvZG9jcy9wcm9kdWN0cy9henVyZS1saW51eC9mZWF0dXJlcy9zZWN1cml0eS9maXBzCiMgVE9ETyByZW1vdmUgdGhpcyBvbmNlIHNrdSBjYmwtbWFyaW5lci0yLWdlbjItZmlwcyBpcyBzdXBwb3J0ZWQgYnkgYXV0b21hdGljIE9TIHVwZGF0ZXMKIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy1hdXRvbWF0aWMtdXBncmFkZSNzdXBwb3J0ZWQtb3MtaW1hZ2VzCmZpcHNfY29uZmlndXJlKCkgewogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCBib290X3V1aWQKICAgIGdldF9ib290X2Rldl91dWlkIGJvb3RfdXVpZAoKICAgIGxvY2FsIGdydWIyX2VudgogICAgaWYgZ3J1YjJfZW52PSIkKGdydWIyLWVkaXRlbnYgLSBsaXN0IHwgZ3JlcCBrZXJuZWxvcHRzKSI7IHRoZW4KICAgICAgICBncnViMi1lZGl0ZW52IC0gc2V0ICIkZ3J1YjJfZW52IGZpcHM9MSAkYm9vdF91dWlkIgogICAgZWxzZQogICAgICAgIGdydWJieSAtLXVwZGF0ZS1rZXJuZWw9QUxMIC0tYXJncz0iZmlwcz0xICRib290X3V1aWQiCiAgICBmaQoKICAgICMgZmlwcyBtb2RlIHZlcmlmaWNhdGlvbiB3aWxsIGZhaWwgdW50aWwgYWZ0ZXIgdGhlIHZtIGhhcyBiZWVuIHJlYm9vdGVkCiAgICAjIGZpcHNfdmVyaWZ5Cn0KCiMgY29uZmlndXJlX3NzaGQKIyBXZSBuZWVkIHRvIGNvbmZpZ3VyZSBQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHRvIHllcyBpbiBvcmRlciBmb3IgdGhlIFZNU1MgQWNjZXNzIEpJVCB0byB3b3JrCmNvbmZpZ3VyZV9zc2hkKCkgewogICAgbG9nICJzdGFydGluZyIKICAgIGxvY2FsIC1yIHNzaGRfY29uZmlnPSIvZXRjL3NzaC9zc2hkX2NvbmZpZyIKCiAgICBsb2cgIkVkaXRpbmcgJHNzaGRfY29uZmlnIHRvIGFsbG93IHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIgogICAgc2VkIC1pICdzL1Bhc3N3b3JkQXV0aGVudGljYXRpb24gbm8vUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMvZycgIiRzc2hkX2NvbmZpZyIKCiAgICBzeXN0ZW1jdGwgcmVsb2FkIHNzaGQuc2VydmljZSB8fCBhYm9ydCAic3NoZCBmYWlsZWQgdG8gcmVsb2FkIgp9CgojIGNvbmZpZ3VyZV9sb2dyb3RhdGUgY2xvYmJlcnMgL2V0Yy9sb2dyb3RhdGUuY29uZgojIGFyZ3M6CiMgMSkgZHJvcGluX2ZpbGVzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXksIG9wdGlvbmFsOyBsb2dyb3RhdGUgZmlsZXMgdG8gd3JpdGUgdG8gL2V0Yy9sb2dyb3RhdGUuZAojICAgICAgIEtleSBuYW1lIGRpY3RhdGVzIGZpbGVuYW1lcyB3cml0dGVuIHRvIC9ldGMvbG9ncm90YXRlLmQuCiMgRXhhbXBsZTogCiMgICBLZXkgZGljdGF0ZXMgdGhlIGZpbGVuYW1lIHdyaXR0ZW4gaW4gL2V0Yy9sb2dyb3RhdGUuZAojICAgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAojICAgbG9jYWwgLXJBIGxvZ3JvdGF0ZV9kcm9waW5zPSgKIyAgICAgIFsiZ2F0ZXdheSJdPSIkZ2F0ZXdheV9sb2dfZmlsZSIKIyAgICkKY29uZmlndXJlX2xvZ3JvdGF0ZSgpIHsKICAgIGxvY2FsIC1uIGRyb3Bpbl9maWxlcz0iJHsxOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lPScvZXRjL2xvZ3JvdGF0ZS5jb25mJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlPScjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKIyByb3RhdGUgbG9nIGZpbGVzIHdlZWtseQp3ZWVrbHkKCiMga2VlcCAyIHdlZWtzIHdvcnRoIG9mIGJhY2tsb2dzCnJvdGF0ZSAyCgojIGNyZWF0ZSBuZXcgKGVtcHR5KSBsb2cgZmlsZXMgYWZ0ZXIgcm90YXRpbmcgb2xkIG9uZXMKY3JlYXRlCgojIHVzZSBkYXRlIGFzIGEgc3VmZml4IG9mIHRoZSByb3RhdGVkIGZpbGUKZGF0ZWV4dAoKIyB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB5b3VyIGxvZyBmaWxlcyBjb21wcmVzc2VkCmNvbXByZXNzCgojIFJQTSBwYWNrYWdlcyBkcm9wIGxvZyByb3RhdGlvbiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgZGlyZWN0b3J5CmluY2x1ZGUgL2V0Yy9sb2dyb3RhdGUuZAoKIyBubyBwYWNrYWdlcyBvd24gd3RtcCBhbmQgYnRtcCAtLSB3ZSB3aWxsIHJvdGF0ZSB0aGVtIGhlcmUKL3Zhci9sb2cvd3RtcCB7CiAgICBtb250aGx5CiAgICBjcmVhdGUgMDY2NCByb290IHV0bXAKICAgICAgICBtaW5zaXplIDFNCiAgICByb3RhdGUgMQp9CgovdmFyL2xvZy9idG1wIHsKICAgIG1pc3NpbmdvawogICAgbW9udGhseQogICAgY3JlYXRlIDA2MDAgcm9vdCB1dG1wCiAgICByb3RhdGUgMQp9JwoKICAgIHdyaXRlX2ZpbGUgbG9ncm90YXRlX2NvbmZfZmlsZW5hbWUgbG9ncm90YXRlX2NvbmZfZmlsZSB0cnVlCgogICAgaWYgWyAtbiAiJHtkcm9waW5fZmlsZXNbKl19IiBdOyB0aGVuCiAgICAgICAgbG9jYWwgLXIgbG9ncm90YXRlX2Q9Ii9ldGMvbG9ncm90YXRlLmQiCiAgICAgICAgbG9nICJXcml0aW5nIGxvZ3JvdGF0ZSBmaWxlcyB0byAkbG9ncm90YXRlX2QiCiAgICAgICAgZm9yIGRyb3Bpbl9uYW1lIGluICIkeyFkcm9waW5fZmlsZXNbQF19IjsgZG8KICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgICAgIGxvY2FsIC1yIGRyb3Bpbl9maWxlbmFtZT0iJGxvZ3JvdGF0ZV9kLyRkcm9waW5fbmFtZSIKICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgICAgIGxvY2FsIC1yIGRyb3Bpbl9maWxlPSIke2Ryb3Bpbl9maWxlc1siJGRyb3Bpbl9uYW1lIl19IgogICAgICAgICAgICB3cml0ZV9maWxlIGRyb3Bpbl9maWxlbmFtZSBkcm9waW5fZmlsZSB0cnVlCiAgICAgICAgZG9uZQogICAgZmkKfQoKIyBwdWxsX2NvbnRhaW5lcl9pbWFnZXMKIyBhcmdzOgojIDEpIHB1bGxfaW1hZ2VzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5CiMgMikgcmVnaXN0cnlfY29uZiAtIG5hbWVyZWYsIHN0cmluZywgb3B0aW9uYWw7IHBhdGggdG8gZG9ja2VyL3BvZG1hbiBjb25maWd1cmF0aW9uIGZpbGUKcHVsbF9jb250YWluZXJfaW1hZ2VzKCkgewogICAgbG9jYWwgLW4gcHVsbF9pbWFnZXM9IiQxIgogICAgbG9jYWwgLW4gcmVnaXN0cnlfY29uZj0iJHsyOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yaSByZXRyeV90aW1lPTMwCiAgICAjIFRoZSBtYW5hZ2VkIGlkZW50aXR5IHRoYXQgdGhlIFZNIHJ1bnMgYXMgb25seSBoYXMgYSBzaW5nbGUgcm9sZWFzc2lnbm1lbnQuCiAgICAjIFRoaXMgcm9sZSBhc3NpZ25tZW50IGlzIEFDUlB1bGwgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHByZXNlbnQgaW4gdGhlCiAgICAjIHN1YnNjcmlwdGlvbiB3ZSdyZSBkZXBsb3lpbmcgaW50by4gIElmIHRoZSBpZGVudGl0eSBkb2VzIG5vdCBoYXZlIGFueQogICAgIyByb2xlIGFzc2lnbm1lbnRzIHNjb3BlZCBvbiB0aGUgc3Vic2NyaXB0aW9uIHdlJ3JlIGRlcGxveWluZyBpbnRvLCBpdCB3aWxsCiAgICAjIG5vdCBzaG93IG9uIGF6IGxvZ2luIC1pLCB3aGljaCBpcyB3aHkgdGhlIGJlbG93IGxpbmUgaXMgY29tbWVudGVkLgogICAgIyBheiBhY2NvdW50IHNldCAtcyAiJFNVQlNDUklQVElPTklEIgogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGxvZ2luCiAgICAgICAgLWkKICAgICAgICAtLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9naW4gd2l0aCByZXRyaWVzIgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKCiAgICAjIFN1cHByZXNzIGVtdWxhdGlvbiBvdXRwdXQgZm9yIHBvZG1hbiBpbnN0ZWFkIG9mIGRvY2tlciBmb3IgYXogYWNyIGNvbXBhdGFiaWxpdHkKICAgIG1rZGlyIC1wIC9ldGMvY29udGFpbmVycy8KICAgIG1rZGlyIC1wIC9yb290Ly5kb2NrZXIKICAgIHRvdWNoIC9ldGMvY29udGFpbmVycy9ub2RvY2tlcgoKICAgICMgVGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIGNhc2UgdGhhdCBheiBhY3IgbG9naW4gc2VhcmNoZXMgZm9yIHRoaXMgaW4gaXQncyBlbnZpcm9ubWVudAogICAgZXhwb3J0IFJFR0lTVFJZX0FVVEhfRklMRT0iL3Jvb3QvLmRvY2tlci9jb25maWcuanNvbiIKICAgIAogICAgaWYgWyAtbiAiJHtyZWdpc3RyeV9jb25mfSIgXTsgdGhlbgogICAgICAgIHdyaXRlX2ZpbGUgUkVHSVNUUllfQVVUSF9GSUxFIHJlZ2lzdHJ5X2NvbmYgdHJ1ZQogICAgZmkKCiAgICBsb2cgImxvZ2dpbmcgaW50byBwcm9kIGFjciIKICAgIGNtZD0oCiAgICAgICAgYXoKICAgICAgICBhY3IKICAgICAgICBsb2dpbgogICAgICAgIC0tbmFtZQogICAgICAgICMgVE9ETyByZXBsYWNlIHRoaXMgd2l0aCB2YXJpYWJsZSBleHBhbnNpb24KICAgICAgICAjIFJlZmVyZW5jZTogaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIwMDEKICAgICAgICAiJChzZWQgLWUgJ3N8LiovfHwnIDw8PCIkQUNSUkVTT1VSQ0VJRCIpIgogICAgKQoKICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3IgaSBpbiAke3B1bGxfaW1hZ2VzW0BdfTsgZG8KICAgICAgICBsb2NhbCAtbiBpbWFnZT0iJGkiCiAgICAgICAgY21kPSgKICAgICAgICAgICAgcG9kbWFuCiAgICAgICAgICAgIHB1bGwKICAgICAgICAgICAgIiRpbWFnZSIKICAgICAgICApCgogICAgICAgIGxvZyAiUHVsbGluZyBpbWFnZSAkaW1hZ2Ugd2l0aCByZXRyaWVzIG5vdyIKICAgICAgICByZXRyeSBjbWQgcmV0cnlfdGltZQogICAgZG9uZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGxvZ291dAogICAgKQoKICAgIGxvZyAiUnVubmluZyBheiBsb2dvdXQgd2l0aCByZXRyaWVzIgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKfQoKIyBjb25maWd1cmVfY2VydHNfZ2VuZXJhbCBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBjb21tb24gdG8gYWxsIFZNU1MgaW5zdGFuY2VzCmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNldHRpbmcgTU9OSVRPUklOR19HQ1NfQVVUSF9JRF9UWVBFPUF1dGhLZXlWYXVsdCBzZWVtcyB0byBoYXZlIGNhdXNlZCBtZHNkIG5vdAogICAgIyB0byBob25vdXIgU1NMX0NFUlRfRklMRSBhbnkgbW9yZSwgaGVhdmVuIG9ubHkga25vd3Mgd2h5LgogICAgbG9jYWwgLXIgc3NsX2NlcnRzX2Jhc2VkaXI9Ii91c3IvbGliL3NzbC9jZXJ0cyIKICAgIG1rZGlyIC1wICIkc3NsX2NlcnRzX2Jhc2VkaXIiCiAgICBjc3BsaXQgLWYgIiRzc2xfY2VydHNfYmFzZWRpci9jZXJ0LSIgLWIgJTAzZC5wZW0gL2V0Yy9wa2kvdGxzL2NlcnRzL2NhLWJ1bmRsZS5jcnQgL14kLzEgInsqfSIgMT4vZGV2L251bGwKICAgIGNfcmVoYXNoICIkc3NsX2NlcnRzX2Jhc2VkaXIiCn0KCiMgY29uZmlndXJlX2NlcnRzX3JwIENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGZvciBSUCBWTVNTCiMgYXJnczoKY29uZmlndXJlX2NlcnRzX3JwKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlX3JwCgogICAgbG9jYWwgLXIgcnBfY2VydHNfYmFzZWRpcj0iL2V0Yy9hcm8tcnAiCiAgICBta2RpciAtcCAiJHJwX2NlcnRzX2Jhc2VkaXIiCiAgICBiYXNlNjQgLWQgPDw8IiRBRE1JTkFQSUNBQlVORExFIiA+ICIkcnBfY2VydHNfYmFzZWRpci9hZG1pbi1jYS1idW5kbGUucGVtIgogICAgaWYgW1sgLW4gIiRBUk1BUElDQUJVTkRMRSIgXV07IHRoZW4KICAgIGJhc2U2NCAtZCA8PDwiJEFSTUFQSUNBQlVORExFIiA+ICIkcnBfY2VydHNfYmFzZWRpci9hcm0tY2EtYnVuZGxlLnBlbSIKICAgIGZpCiAgICBjaG93biAtUiAxMDAwOjEwMDAgIiRycF9jZXJ0c19iYXNlZGlyIgoKICAgIGNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KCiMgY29uZmlndXJlX2NlcnRzX2dhdGV3YXkgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgZm9yIEdhdGV3YXkgVk1TUyBpbnN0YW5jZXMKY29uZmlndXJlX2NlcnRzX2dhdGV3YXkoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGVfZ2F0ZXdheQogICAgY29uZmlndXJlX2NlcnRzX2dlbmVyYWwKfQoKIyBjb25maWd1cmVfY2VydHNfZGV2cHJveHkgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgZm9yIGRldnByb3h5IFZNU1MgaW5zdGFuY2VzCmNvbmZpZ3VyZV9jZXJ0c19kZXZwcm94eSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZV9kZXZwcm94eSB0cnVlCiAgICAKICAgIGxvY2FsIC1yIHByb3h5X2NlcnRzX2Jhc2VkaXI9Ii9ldGMvcHJveHkiCiAgICBta2RpciAtcCAiJHByb3h5X2NlcnRzX2Jhc2VkaXIiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LmNydCIKICAgIGJhc2U2NCAtZCA8PDwiJFBST1hZS0VZIiA+ICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUNMSUVOVENFUlQiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LWNsaWVudC5jcnQiCiAgICBjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQogICAgY2htb2QgMDYwMCAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkua2V5Igp9Cgpjb25maWd1cmVfYXpzZWNkX3NjYW4oKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgICMgd2UgbGVhdmUgY2xpZW50SWQgYmxhbmsgYXMgbG9uZyBhcyBvbmx5IDEgbWFuYWdlZCBpZGVudGl0eSBhc3NpZ25lZCB0byB2bXNzCiAgICAjIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEsIHdlIHdpbGwgbmVlZCB0byBwb3B1bGF0ZSB3aXRoIGNsaWVudElkIHVzZWQgZm9yIG9mZi1ub2RlIHNjYW5uaW5nCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lPSIvZXRjL2RlZmF1bHQvdnNhLW5vZGVzY2FuLWFnZW50LmNvbmZpZyIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZT0iewogICAgXCJOaWNlXCI6IDE5LAogICAgXCJUaW1lb3V0XCI6IDEwODAwLAogICAgXCJDbGllbnRJZFwiOiBcIlwiLAogICAgXCJUZW5hbnRJZFwiOiAkQVpVUkVTRUNQQUNLVlNBVEVOQU5USUQsCiAgICBcIlF1YWx5c1N0b3JlQmFzZVVybFwiOiAkQVpVUkVTRUNQQUNLUVVBTFlTVVJMLAogICAgXCJQcm9jZXNzVGltZW91dFwiOiAzMDAsCiAgICBcIkNvbW1hbmREZWxheVwiOiAwCiAgfSIKCiAgICB3cml0ZV9maWxlIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lIG5vZGVzY2FuX2FnZW50X2ZpbGUgdHJ1ZQp9CgojIHJ1bl9henNlY2RfY29uZmlnX3NjYW4KcnVuX2F6c2VjZF9jb25maWdfc2NhbigpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgY29uZmlndXJlX2F6c2VjZF9zY2FuCgogICAgbG9jYWwgLWFyIGNvbmZpZ3M9KAogICAgICAgICJiYXNlbGluZSIKICAgICAgICAiY2xhbWF2IgogICAgICAgICJzb2Z0d2FyZSIKICAgICkKCiAgICBsb2cgIlNjYW5uaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2l0aCBhenNlY2QgJHtjb25maWdzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHNjYW4gaW4gJHtjb25maWdzW0BdfTsgZG8KICAgICAgICBsb2cgIlNjYW5uaW5nIGNvbmZpZyBmaWxlICRzY2FuIG5vdyIKICAgICAgICAvdXNyL2xvY2FsL2Jpbi9henNlY2QgY29uZmlnIC1zICIkc2NhbiIgLWQgUDFECiAgICBkb25lCn0KCiMgY3JlYXRlX3JlcXVpcmVkX2RpcnMKY3JlYXRlX3JlcXVpcmVkX2RpcnMoKSB7CiAgICBjcmVhdGVfZGlycz0oCiAgICAgICAgL3Zhci9sb2cvam91cm5hbAogICAgICAgIC92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlCiAgICAgICAgIyBEb2VzIG5vdCBleGlzdCBvbiBkZXZQcm94eVZNU1MKICAgICAgICAvdmFyL29wdC9taWNyb3NvZnQvbGludXhtb25hZ2VudAogICAgKQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIGQgaW4gJHtjcmVhdGVfZGlyc1tAXX07IGRvCiAgICAgICAgbG9nICJDcmVhdGluZyBkaXJlY3RvcnkgJGQiCiAgICAgICAgbWtkaXIgLXAgIiRkIiB8fCBhYm9ydCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJGQiCiAgICBkb25lCn0KCiMgY3JlYXRlX3BvZG1hbl9uZXR3b3JrcygpCiMgYXJnczoKIyAxKSBuZXRzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IE5ldHdvcmtzIHRvIGJlIGNyZWF0ZWQKIyAgICAgICBLZXkgaXMgdGhlIG5ldHdvcmsgbmFtZSwgdmFsdWUgaXMgdGhlIHN1Ym5ldCB3aXRoIGNpZHIgbm90YXRpb24KY3JlYXRlX3BvZG1hbl9uZXR3b3JrcygpIHsKICAgIGxvY2FsIC1uIG5ldHM9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBuIGluICR7IW5ldHNbQF19OyBkbwogICAgICAgIGxvZyAiQ3JlYXRpbmcgcG9kbWFuIG5ldHdvcmsgXCIkblwiIHdpdGggc3VibmV0IFwiJHtuZXRzWyRuXX1cIiIKICAgICAgICBwb2RtYW4gbmV0d29yayBcCiAgICAgICAgICAgIGNyZWF0ZSBcCiAgICAgICAgICAgIC0tc3VibmV0ICIke25ldHNbIiRuIl19IiBcCiAgICAgICAgICAgICIkbiIKICAgIGRvbmUKfQoKIyBmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2cgIkNoYW5naW5nIGZpcmV3YWxsZCBiYWNrZW5kIHRvIGlwdGFibGVzIgogICAgY29uZl9maWxlPSIvZXRjL2ZpcmV3YWxsZC9maXJld2FsbGQuY29uZiIKICAgIHNlZCAtaSAncy9GaXJld2FsbEJhY2tlbmQ9bmZ0YWJsZXMvRmlyZXdhbGxCYWNrZW5kPWlwdGFibGVzL2cnICIkY29uZl9maWxlIgp9CgojIGZpcmV3YWxsZF9jb25maWd1cmUKIyBhcmdzOgojIDEpIHBvcnRzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBwb3J0cyB0byBiZSBlbmFibGVkLgojICAgICAgIFBvcnRzIG11c3QgYmUgcG9zdGZpeGVkIHdpdGggL3RjcCBvciAvdWRwCmZpcmV3YWxsZF9jb25maWd1cmUoKSB7CiAgICBsb2NhbCAtbiBwb3J0cz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZAoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIHNlcnZpY2U9KAogICAgICAgICJmaXJld2FsbGQiCiAgICApCiAgICBlbmFibGVfc2VydmljZXMgc2VydmljZQoKICAgIGxvZyAiRW5hYmxpbmcgcG9ydHMgJHtwb3J0c1sqXX0gb24gZGVmYXVsdCBmaXJld2FsbGQgem9uZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHBvcnQgaW4gJHtwb3J0c1tAXX07IGRvCiAgICAgICAgbG9nICJFbmFibGluZyBwb3J0ICRwb3J0IG5vdyIKICAgICAgICBmaXJld2FsbC1jbWQgIi0tYWRkLXBvcnQ9JHBvcnQiIFwKICAgICAgICAgICAgICAgICAgICAgLS1wZXJtYW5lbnQKICAgIGRvbmUKCiAgICBsb2cgIldyaXRpbmcgcnVudGltZSBjb25maWcgdG8gcGVybWFuZW50IGNvbmZpZyIKICAgIGZpcmV3YWxsLWNtZCAtLXJ1bnRpbWUtdG8tcGVybWFuZW50Cn0KCiMgdXRpbC1jb21tb24uc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKCnNldCAtbyBlcnJleGl0IFwKICAgIC1vIHBpcGVmYWlsIFwKICAgIC1vIG5vdW5zZXQKCm1haW4oKSB7CiAgICAjIHRyYW5zYWN0aW9uIGF0dGVtcHQgcmV0cnkgdGltZSBpbiBzZWNvbmRzCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yaSByZXRyeV93YWl0X3RpbWU9MzAKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgbG9jYWwgLXJpIHBrZ19yZXRyeV9jb3VudD02MAoKICAgIGNyZWF0ZV9yZXF1aXJlZF9kaXJzCiAgICBjb25maWd1cmVfc3NoZAogICAgY29uZmlndXJlX3JwbV9yZXBvcyByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLWFyIGV4Y2x1ZGVfcGtncz0oCiAgICAgICAgIi14IFdBTGludXhBZ2VudCIKICAgICAgICAiLXggV0FMaW51eEFnZW50LXVkZXYiCiAgICApCgogICAgZG5mX3VwZGF0ZV9wa2dzIGV4Y2x1ZGVfcGtncyBcCiAgICAgICAgICAgICAgICAgICAgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAiJHBrZ19yZXRyeV9jb3VudCIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBpbnN0YWxsX3BrZ3M9KAogICAgICAgIGNsYW1hdgogICAgICAgIGF6c2VjLWNsYW1hdgogICAgICAgIGF6dXJlLWNsaQogICAgICAgIGF6dXJlLW1kc2QKICAgICAgICBhenVyZS1zZWN1cml0eQogICAgICAgIHBvZG1hbgogICAgICAgIHBvZG1hbi1kb2NrZXIKICAgICAgICBvcGVuc3NsLXBlcmwKICAgICAgICAjIGhhY2sgLSB3ZSBhcmUgaW5zdGFsbGluZyBweXRob24zIG9uIGhvc3RzIGR1ZSB0byBhbiBpc3N1ZSB3aXRoIEF6dXJlIExpbnV4IEV4dGVuc2lvbnMgaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlL2F6dXJlLWxpbnV4LWV4dGVuc2lvbnMvcHVsbC8xNTA1CiAgICAgICAgcHl0aG9uMwogICAgICAgICMgcmVxdWlyZWQgZm9yIHBvZG1hbiBuZXR3b3JraW5nCiAgICAgICAgZmlyZXdhbGxkCiAgICAgICAgIyBSZXF1aXJlZCB0byBlbmFibGUgZmlwcwogICAgICAgIGdydWJieQogICAgICAgIGRyYWN1dC1maXBzCiAgICApCgogICAgZG5mX2luc3RhbGxfcGtncyBpbnN0YWxsX3BrZ3MgXAogICAgICAgICAgICAgICAgICAgICByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICAiJHBrZ19yZXRyeV9jb3VudCIKICAgIAogICAgZmlwc19jb25maWd1cmUKCiAgICAjIFRPRE8gcmVtb3ZlIHRoaXMgb25jZSBNaWNyb3NvZnRDQkxNYXJpbmVyOmNibC1tYXJpbmVyOmNibC1tYXJpbmVyLTItZ2VuMi1maXBzIHN1cHBvcnRzIGF1dG9tYXRpYyB1cGRhdGVzCiAgICAjIFJlZmVyZW5jZTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZS1zY2FsZS1zZXRzL3ZpcnR1YWwtbWFjaGluZS1zY2FsZS1zZXRzLWF1dG9tYXRpYy11cGdyYWRlI3N1cHBvcnRlZC1vcy1pbWFnZXMKICAgIGNvbmZpZ3VyZV9kbmZfY3Jvbl9qb2IKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxMTkKICAgIGNvbmZpZ3VyZV9sb2dyb3RhdGUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQgZGlzYWJsZT1TQzIxNTMKICAgIGxvY2FsIC1yIG1kbWltYWdlPSIke1JQSU1BR0UlJS8qfS8ke01ETUlNQUdFIyovfSIKICAgIGxvY2FsIC1yIHJwaW1hZ2U9IiRSUElNQUdFIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBmbHVlbnRiaXRfaW1hZ2U9IiRGTFVFTlRCSVRJTUFHRSIKICAgICMgdmFsdWVzIGFyZSByZWZlcmVuY2VzIHRvIHZhcmlhYmxlcywgdGhleSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBoZXJlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9faW1hZ2VzPSgKICAgICAgICBbIm1kbSJdPSJtZG1pbWFnZSIKICAgICAgICBbInJwIl09InJwaW1hZ2UiCiAgICAgICAgWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2ltYWdlIgogICAgKQoKICAgIHB1bGxfY29udGFpbmVyX2ltYWdlcyBhcm9faW1hZ2VzCgogICAgbG9jYWwgLXIgYXJvX25ldHdvcms9ImFybyIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJBIG5ldHdvcmtzPSgKICAgICAgICBbIiRhcm9fbmV0d29yayJdPSIxOTIuMTY4LjI1NC4wLzI0IgogICAgKQogICAgY3JlYXRlX3BvZG1hbl9uZXR3b3JrcyBuZXR3b3JrcwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIGVuYWJsZV9wb3J0cz0oCiAgICAgICAgIyBSUCBnYXRld2F5CiAgICAgICAgIjgwL3RjcCIKICAgICAgICAiODA4MS90Y3AiCiAgICAgICAgIjQ0My90Y3AiCiAgICAgICAgIyBKSVQgc3NoCiAgICAgICAgIjIyL3RjcCIKICAgICkKCiAgICBmaXJld2FsbGRfY29uZmlndXJlIGVuYWJsZV9wb3J0cwoKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGZsdWVudGJpdF9jb25mX2ZpbGU9IltJTlBVVF0KICAgIE5hbWUgc3lzdGVtZAogICAgVGFnIGpvdXJuYWxkCiAgICBTeXN0ZW1kX0ZpbHRlciBfQ09NTT1hcm8KICAgIERCIC92YXIvbGliL2ZsdWVudC9qb3VybmFsZGIKCltGSUxURVJdCglOYW1lIG1vZGlmeQoJTWF0Y2ggam91cm5hbGQKCVJlbW92ZV93aWxkY2FyZCBfCglSZW1vdmUgVElNRVNUQU1QCgpbT1VUUFVUXQoJTmFtZSBmb3J3YXJkCglNYXRjaCAqCglQb3J0IDI5MjMwIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX2dhdGV3YXlfY29uZl9maWxlPSJBQ1JfUkVTT1VSQ0VfSUQ9JyRBQ1JSRVNPVVJDRUlEJwpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT0nJHtyb2xlX2dhdGV3YXlefScKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfRkVBVFVSRVM9JyRHQVRFV0FZRkVBVFVSRVMnClJQSU1BR0U9JyRycGltYWdlJyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2RfY29uZmlnX3ZlcnNpb249IiRHQVRFV0FZTURTRENPTkZJR1ZFUlNJT04iCgogICAgIyB2YWx1ZXMgYXJlIHJlZmVyZW5jZXMgdG8gdmFyaWFibGVzLCB0aGV5IHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkIGhlcmUKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJBIGFyb19jb25maWdzPSgKICAgICAgICBbImdhdGV3YXlfY29uZmlnIl09ImFyb19nYXRld2F5X2NvbmZfZmlsZSIKICAgICAgICBbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfY29uZl9maWxlIgogICAgICAgIFsibWRzZCJdPSJtZHNkX2NvbmZpZ192ZXJzaW9uIgogICAgICAgIFsibmV0d29yayJdPSJhcm9fbmV0d29yayIKICAgICkKCiAgICBjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMgcm9sZV9nYXRld2F5IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm9faW1hZ2VzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm9fY29uZmlncwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIGdhdGV3YXlfc2VydmljZXM9KAogICAgICAgICJhcm8tZ2F0ZXdheSIKICAgICAgICAiYXpzZWNkIgogICAgICAgICJtZHNkIgogICAgICAgICJtZG0iCiAgICAgICAgImNocm9ueWQiCiAgICAgICAgImZsdWVudGJpdCIKICAgICAgICAiZG93bmxvYWQtbWRzZC1jcmVkZW50aWFscy50aW1lciIKICAgICAgICAiZG93bmxvYWQtbWRtLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICJmaXJld2FsbGQiCiAgICApCgogICAgZW5hYmxlX3NlcnZpY2VzIGdhdGV3YXlfc2VydmljZXMKCiAgICByZWJvb3Rfdm0KfQoKZXhwb3J0IEFaVVJFX0NMT1VEX05BTUU9IiR7QVpVUkVDTE9VRE5BTUU6PyJGYWlsZWQgdG8gY2Fycnkgb3ZlciB2YXJpYWJsZXMifSIKCiMgdXRpbC5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbD0idXRpbC5zaCIKaWYgWyAtZiAiJHV0aWwiIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC5zaAogICAgc291cmNlICIkdXRpbCIKZmkKCm1haW4gIiRAIgo=')))]" } } }, diff --git a/pkg/deploy/assets/rp-production.json b/pkg/deploy/assets/rp-production.json index eddaf610a68..e83733624c7 100644 --- a/pkg/deploy/assets/rp-production.json +++ b/pkg/deploy/assets/rp-production.json @@ -448,7 +448,7 @@ "autoUpgradeMinorVersion": true, "settings": {}, "protectedSettings": { - "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','ADMINAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('adminApiClientCertCommonName')),''')\n','ARMAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armApiClientCertCommonName')),''')\n','ARMCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armClientId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','CLUSTERMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdmAccount')),''')\n','CLUSTERMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdAccount')),''')\n','CLUSTERMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdConfigVersion')),''')\n','CLUSTERMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdNamespace')),''')\n','CLUSTERPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterParentDomainName')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','FPCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpClientId')),''')\n','FPSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpServicePrincipalId')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYRESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayResourceGroupName')),''')\n','GATEWAYSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayServicePrincipalId')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','PORTALACCESSGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalAccessGroupIds')),''')\n','PORTALCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalClientId')),''')\n','PORTALELEVATEDGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalElevatedGroupIds')),''')\n','RPFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpFeatures')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdConfigVersion')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','RPPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpParentDomainName')),''')\n','OIDCSTORAGEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('oidcStorageAccountName')),''')\n','CLUSTERSINSTALLVIAHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersInstallViaHive')),''')\n','CLUSTERSADOPTBYHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersAdoptByHive')),''')\n','CLUSTERDEFAULTINSTALLERPULLSPEC=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterDefaultInstallerPullspec')),''')\n','ADMINAPICABUNDLE=''',parameters('adminApiCaBundle'),'''\n','ARMAPICABUNDLE=''',parameters('armApiCaBundle'),'''\n','MDMIMAGE=''/distroless/genevamdm:2.2024.626.1539-d1a6e7-20240715t0935@sha256:372fbc981bbfdf2b9a9d0ffdca2c51ed389b291a3bcff0401e9afb0c01605823''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('IyEvYmluL2Jhc2gKIyBJbnRlcm5hbCBGdW5jdGlvbnMgYW5kIENvbnN0YW50cwoKIyBlbXB0eV9zdHIgLSBjb25zdGFudDsgdXNlZCBieSBmdW5jdGlvbnMgZm9yIG9wdGlvbmFsIG5hbWVyZWYgc3RyaW5nIGFyZ3VlbWVudHMKIyBlbXB0eV9zdHI9IiIKIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CmRlY2xhcmUgLXIgZW1wdHlfc3RyPSIiCgojIHJvbGVfZ2F0ZXdheSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHRoaXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkgc2NyaXB0cyBzb3VyY2luZyB0aGlzIGZpbGUKIyByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9nYXRld2F5PSJnYXRld2F5IgojIHJvbGVfcnAgLSBjb25zdGFudDsgSXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggVk1TUyBpcyBiZWluZyBib290c3RyYXBwZWQKIyB0aGlzIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5IHNjcmlwdHMgc291cmNpbmcgdGhpcyBmaWxlCiMgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCiMgcm9sZV9kZXZwcm94eSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgpkZWNsYXJlIC1yIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgoKIyBsb2cgaXMgYSB3cmFwcGVyIGZvciBlY2hvIHRoYXQgaW5jbHVkZXMgdGhlIGZ1bmN0aW9uIG5hbWUKIyBBcmdzCiMgMSkgbXNnIC0gc3RyaW5nCiMgMikgc3RhY2tfbGV2ZWwgLSBpbnQ7IG9wdGlvbmFsLCBkZWZhdWx0cyB0byBjYWxsaW5nIGZ1bmN0aW9uCmxvZygpIHsKICAgIGxvY2FsIC1yIG1zZz0iJHsxOi0ibG9nIG1lc3NhZ2UgaXMgZW1wdHkifSIKICAgIGxvY2FsIC1yIHN0YWNrX2xldmVsPSIkezI6LTF9IgogICAgZWNobyAiJHtGVU5DTkFNRVske3N0YWNrX2xldmVsfV19OiAke21zZ30iCn0KCiMgYWJvcnQgaXMgYSB3cmFwcGVyIGZvciBsb2cgdGhhdCBleGl0cyB3aXRoIGFuIGVycm9yIGNvZGUKYWJvcnQoKSB7CiAgICBsb2NhbCAtcmkgb3JpZ2luX3N0YWNrbGV2ZWw9MgogICAgbG9nICIkezF9IiAiJG9yaWdpbl9zdGFja2xldmVsIgogICAgbG9nICJFeGl0aW5nIgogICAgZXhpdCAxCn0KCiMgd3JpdGVfZmlsZQojIEFyZ3MKIyAxKSBmaWxlbmFtZSAtIHN0cmluZwojIDIpIGZpbGVfY29udGVudHMgLSBzdHJpbmcKIyAzKSBjbG9iYmVyIC0gYm9vbGVhbjsgb3B0aW9uYWwgLSBkZWZhdWx0cyB0byBmYWxzZQp3cml0ZV9maWxlKCkgewogICAgbG9jYWwgLW4gZmlsZW5hbWU9IiQxIgogICAgbG9jYWwgLW4gZmlsZV9jb250ZW50cz0iJDIiCiAgICBsb2NhbCAtciBjbG9iYmVyPSIkezM6LWZhbHNlfSIKCiAgICBpZiAkY2xvYmJlcjsgdGhlbgogICAgICAgIGxvZyAiT3ZlcndyaXRpbmcgZmlsZSAkZmlsZW5hbWUiCiAgICAgICAgZWNobyAiJGZpbGVfY29udGVudHMiID4gIiRmaWxlbmFtZSIKICAgIGVsc2UKICAgICAgICBsb2cgIkFwcGVuZGluZyB0byAkZmlsZW5hbWUiCiAgICAgICAgZWNobyAiJGZpbGVfY29udGVudHMiID4+ICIkZmlsZW5hbWUiCiAgICBmaQp9CgojIHJldHJ5IEFkZGluZyByZXRyeSBsb2dpYyB0byB5dW0gY29tbWFuZHMgaW4gb3JkZXIgdG8gYXZvaWQgc3RhbGxpbmcgb3V0IG9uIHJlc291cmNlIGxvY2tzCiMgYXJnczoKIyAxKSBjbWRfcmV0cnkgLSBuYW1lcmVmLCBhcnJheTsgQ29tbWFuZCBhbmQgYXJndWVtZW50KHMpIHRvIHJldHJ5CiMgMikgd2FpdF90aW1lIC0gbmFtZXJlZiwgaW50ZWdlcjsgVGltZSB0byB3YWl0IGJlZm9yZSByZXRyeWluZyBjb21tYW5kCiMgMykgcmV0cmllcyAtIGludGVnZXIsIG9wdGlvbmFsOyBBbW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKcmV0cnkoKSB7CiAgICBsb2NhbCAtbiBjbWRfcmV0cnk9IiQxIgogICAgbG9jYWwgLW4gd2FpdF90aW1lPSIkMiIKICAgIGxvY2FsIC1yaSByZXRyaWVzPSIkezM6LTV9IgoKICAgIAogICAgZm9yIGF0dGVtcHQgaW4gJChzZXEgMSAkcmV0cmllcyk7IGRvCiAgICAgICAgbG9nICJhdHRlbXB0ICMke2F0dGVtcHR9IC0gJHtGVU5DTkFNRVsyXX0iCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICAgICAgJHtjbWRfcmV0cnlbQF19ICYKCiAgICAgICAgd2FpdCAtZiAkISAmJiByZXR1cm4gMAogICAgICAgIHNsZWVwICIkd2FpdF90aW1lIgogICAgZG9uZQoKICAgIGFib3J0ICIke2NtZF9yZXRyeVsqXX0gZmFpbGVkIGFmdGVyICMkcmV0cmllcyBhdHRlbXB0cyIKfQoKIyB2ZXJpZnlfcm9sZQojIGFyZ3M6CiMgMSkgdGVzdF9yb2xlIC0gbmFtZXJlZjsgcm9sZSBiZWluZyB2ZXJpZmllZAojIDIpIGNlcnRzIC0gYm9vbGVhbiwgb3B0aW9uYWw7IGRlZmF1bHRzIHRvIGZhbHNlLiBTZXQgdG8gdHJ1ZSB0byBhZGQgZGV2cHJveHkgdG8gYWxsb3dlZCByb2xlcwp2ZXJpZnlfcm9sZSgpIHsKICAgIGxvY2FsIC1uIHRlc3Rfcm9sZT0iJDEiCiAgICBsb2NhbCAtciBjZXJ0cz0iJHsyOi1mYWxzZX0iCgogICAgYWxsb3dlZF9yb2xlc19nbG9iPSIoJHJvbGVfcnB8JHJvbGVfZ2F0ZXdheSkiCiAgICBpZiAkY2VydHM7IHRoZW4KICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyAiKSIgYW5kIGFwcGVuZCBhZGRpdGlvbmFsIHJvbGUKICAgICAgICBhbGxvd2VkX3JvbGVzX2dsb2I9IiR7YWxsb3dlZF9yb2xlc19nbG9iJVwpKn18JHJvbGVfZGV2cHJveHkpIgogICAgZmkKCiAgICBpZiBbWyAiJHRlc3Rfcm9sZSIgPX4gJGFsbG93ZWRfcm9sZXNfZ2xvYiBdXTsgdGhlbgogICAgICAgIGxvZyAiVmVyaWZpZWQgcm9sZSBcIiR0ZXN0X3JvbGVcIiIKICAgIGVsc2UKICAgICAgICBhYm9ydCAiZmFpbGVkIHRvIHZlcmlmeSByb2xlLCByb2xlIFwiJHt0ZXN0X3JvbGV9XCIgbm90IGluIFwiJHthbGxvd2VkX3JvbGVzX2dsb2J9XCIiCiAgICBmaQp9CgojIGdldF9rZXl2YXVsdF9zdWZmaXgKIyBhcmdzOgojIDEpIHJsIC0gbmFtZXJlZiwgc3RyaW5nOyByb2xlIHRvIGdldCBzaG9ydCByb2xlIGZvcgojIDIpIGt2X3N1ZmZpeCAtIG5hbWVyZWYsIHN0cmluZzsgc2hvcnQgcm9sZSB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgbmFtZXJlZgojIDMpIHNlY19wcmVmaXggLSBuYW1lcmVmLCBzdHJpbmc7IGtleXZhdWx0IGNlcnRpZmljYXRlIHByZWZpeCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgbmFtZXJlZgpnZXRfa2V5dmF1bHRfc3VmZml4KCkgewogICAgbG9jYWwgLW4gcmw9IiQxIgogICAgbG9jYWwgLW4ga3Zfc3VmZml4PSIkMiIKICAgIGxvY2FsIC1uIHNlY19wcmVmaXg9IiQzIgoKICAgIGxvY2FsIC1yIGtleXZhdWx0X3N1ZmZpeF9ycD0ic3ZjIgogICAgbG9jYWwgLXIga2V5dmF1bHRfcHJlZml4X2dhdGV3YXk9Imd3eSIKCiAgICBjYXNlICIkcmwiIGluCiAgICAgICAgIiRyb2xlX2dhdGV3YXkiKQogICAgICAgICAgICBrdl9zdWZmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKICAgICAgICAgICAgc2VjX3ByZWZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5IgogICAgICAgICAgICA7OwogICAgICAgICIkcm9sZV9ycCIpCiAgICAgICAgICAgIGt2X3N1ZmZpeD0iJGtleXZhdWx0X3N1ZmZpeF9ycCIKICAgICAgICAgICAgc2VjX3ByZWZpeD0iJHJvbGVfcnAiCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgYWJvcnQgInVua293biByb2xlICRybCIKICAgICAgICAgICAgOzsKICAgIGVzYWMKfQoKIyByZWJvb3Rfdm0gcmVzdG9yZXMgYWxsIHNlbGludXggZmlsZSBjb250ZXh0cywgdGhlbiBzY2hlZHVsZXMgYSByZWJvb3QgZm9yIG9uZSBob3VyIGxhdGVyCiMgUmVib290cyBzaG91bGQgc2NoZWR1bGVkIGFmdGVyIGFsbCBWTSBleHRlbnNpb25zIGhhdmUgaGFkIHRpbWUgdG8gY29tcGxldGUKIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmVzL2V4dGVuc2lvbnMvY3VzdG9tLXNjcmlwdC1saW51eCN0aXBzCnJlYm9vdF92bSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgKHNodXRkb3duIC1yIG5vdyAmKQp9CiMhL2Jpbi9iYXNoCiMgUmVwb3NpdG9yeSBhbmQgcGFja2FnZSBtYW5hZ2VtZW50IHJlbGF0ZWQgZnVuY3Rpb25zCgpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkKCkgewogICAgbG9jYWwgLXIgZXh0ZW5kZWRfcmVwb19jb25maWc9Imh0dHBzOi8vcGFja2FnZXMubWljcm9zb2Z0LmNvbS9jYmwtbWFyaW5lci8yLjAvcHJvZC9leHRlbmRlZC94ODZfNjQvY29uZmlnLnJlcG8iCiAgICBjdXJsIC1zU0wgIiRleHRlbmRlZF9yZXBvX2NvbmZpZyIgLW8gL2V0Yy95dW0ucmVwb3MuZC9tYXJpbmVyLWV4dGVuZGVkLnJlcG8KCiAgICBsb2NhbCAtciByZXBvX25hbWU9ImNibC1tYXJpbmVyMi4wcHJvZGV4dGVuZGVkeDg2XzY0IgoKICAgIGxvY2FsIC1yYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIHVwZGF0ZQogICAgICAgIC15CiAgICAgICAgLS1lbmFibGVyZXBvPSIkcmVwb19uYW1lIgogICAgKQoKICAgIGxvZyAiRW5hYmxpbmcgcmVwbyAkcmVwb19uYW1lIgogICAgcmV0cnkgY21kICIkMSIgIiR7MjotfSIKfQoKIyBjb25maWd1cmVfcnBtX3JlcG9zCiMgTmV3IHJlcG9zaXRvcmllcyBzaG91bGQgYmUgYWRkZWQgaW4gdGhlaXIgb3duIGZ1bmN0aW9ucywgYW5kIGNhbGxlZCBoZXJlCiMgYXJnczoKIyAxKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAyKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmNvbmZpZ3VyZV9ycG1fcmVwb3MoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGNvbmZpZ3VyZV9yZXBvX21hcmluZXJfZXh0ZW5kZWQgIiQxIiAiJHsyOi0xfSIKfQoKIyBkbmZfaW5zdGFsbF9wa2dzCiMgYXJnczoKIyAxKSBwa2dzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBQYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmRuZl9pbnN0YWxsX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBwa2dzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9jYWwgLWEgY21kPSgKICAgICAgICBkbmYKICAgICAgICAteQogICAgICAgIGluc3RhbGwKICAgICkKICAgIAogICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vd3d3LnNoZWxsY2hlY2submV0L3dpa2kvU0MyMjA2CiAgICAjIGFwcGVuZCBwa2dzIGFycmF5IHRvIGNtZAogICAgbWFwZmlsZSAtTyAkKCggJHsjY21kW0BdfSArIDEgKSkgLWQgJyAnIGNtZCA8PDwgIiR7cGtnc1tAXX0iCiAgICBsb2NhbCAtciBjbWQKCiAgICBsb2cgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCBwYWNrYWdlczogJHtwa2dzWypdfSIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCgojIGRuZl91cGRhdGVfcGtncwojIGFyZ3M6CiMgMSkgZXhjbHVkZXMgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXksIG9wdGlvbmFsOyBQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdXBkYXRpbmcKIyAgICAgICBFYWNoIGluZGV4IG11c3QgYmUgcHJlZml4ZWQgd2l0aCAteCAKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpkbmZfdXBkYXRlX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBleGNsdWRlcz0iJHsxOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIC15CiAgICAgICAgIyBSZXBsYWNlZCB3aXRoIGV4Y2x1ZGVzCiAgICAgICAgIiIKICAgICAgICB1cGRhdGUKICAgICAgICAtLWFsbG93ZXJhc2luZwogICAgKQoKICAgIGlmIFsgLW4gIiR7ZXhjbHVkZXN9IiBdOyB0aGVuCiAgICAgICAgIyBSZWZlcmVuY2UgaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIyMDYKICAgICAgICBtYXBmaWxlIC1PIDIgY21kIDw8PCAiJHtleGNsdWRlc1tAXX0iCiAgICBlbHNlCiAgICAgICAgIyBSZW1vdmUgZW1wdHkgc3RyaW5nIGlmIHdlIGFyZW4ndCByZXBsYWNpbmcgdGhlbSwgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIsIGJ1dCB3aHkgbm90IGJlIHNhZmUKICAgICAgICB1bnNldCAiY21kWzJdIgogICAgZmkKICAgIGxvY2FsIC1yIGNtZAoKICAgIGxvZyAiVXBkYXRpbmcgYWxsIHBhY2thZ2VzIGV4Y2x1ZGluZyBcIiR7ZXhjbHVkZXNbKl06LX1cIiIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCiMgY29uZmlndXJlX2RuZl9jcm9uX2pvYgojIGNyZWF0ZSBjcm9uIGpvYiB0byBhdXRvIHVwZGF0ZSBycG0gcGFja2FnZXMKY29uZmlndXJlX2RuZl9jcm9uX2pvYigpIHsKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2NhbCAtciBjcm9uX3dlZWtseV9kbmZfdXBkYXRlX2ZpbGVuYW1lPScvZXRjL2Nyb24ud2Vla2x5L2RuZnVwZGF0ZScKICAgIGxvY2FsIC1yIGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZT0iIyEvYmluL2Jhc2gKZG5mIHVwZGF0ZSAteSIKCiAgICB3cml0ZV9maWxlIGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZW5hbWUgY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlIHRydWUKICAgIGNobW9kIHUreCAiJGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZW5hbWUiCn0KCiMgcnBtX2ltcG9ydF9rZXlzCiMgYXJnczoKIyAxKSBrZXlzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBycG0ga2V5cyB0byBiZSBpbXBvcnRlZAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZApycG1faW1wb3J0X2tleXMoKSB7CiAgICBsb2NhbCAtbiBrZXlzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Iga2V5IGluICR7a2V5c1tAXX07IGRvCiAgICAgICAgaWYgWyAkeyNrZXlzW0BdfSAtZXEgMCBdOyB0aGVuCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZmkKCiAgICAgICAgbG9jYWwgLWEgY21kPSgKICAgICAgICAgICAgcnBtCiAgICAgICAgICAgIC0taW1wb3J0CiAgICAgICAgICAgIC12CiAgICAgICAgICAgICIka2V5IgogICAgICAgICkKCiAgICAgICAgbG9nICJJbXBvcnRpbmcgcnBtIHJlcG9zaXRvcnkga2V5ICRrZXkiCiAgICAgICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIgJiYgdW5zZXQga2V5CiAgICBkb25lCn0KIyEvYmluL2Jhc2gKIyBBUk8gc2VydmljZSBzZXR1cCBmdW5jdGlvbnMKCiMgZW5hYmxlX3NlcnZpY2VzIGVuYWJsZXMgdGhlIHN5c3RlbWQgc2VydmljZXMgdGhhdCBhcmUgcGFzc2VkIGluCiMgYXJnczoKIyAxKSBzZXJ2aWNlcyAtIGFycmF5OyBzZXJ2aWNlcyB0byBiZSBlbmFibGVkCmVuYWJsZV9zZXJ2aWNlcygpIHsKICAgIGxvY2FsIC1uIHN2Y3M9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAoKICAgIGxvZyAiZW5hYmxpbmcgc2VydmljZXMgJHtzdmNzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHN2YyBpbiAke3N2Y3NbQF19OyBkbwogICAgICAgIGxvZyAiRW5hYmxpbmcgYW5kIHN0YXJ0aW5nICRzdmMgbm93IgogICAgICAgIHN5c3RlbWN0bCBlbmFibGUgXAogICAgICAgICAgICAgICAgICAtLW5vdyBcCiAgICAgICAgICAgICAgICAgICIkc3ZjIgogICAgZG9uZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5CiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgY29udGFpbmVyIGltYWdlCiMgMikgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgVk1TUyByb2xlCiMgMykgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nOyBhcm8gZ2F0ZXdheSBlbnZpcm9ubWVudCBmaWxlCiMgNCkgbmV0d29yayAtIG5hbWVyZWYsIHN0cmluZzsgcG9kbWFuIG5ldHdvcmsgbmFtZSB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fZ2F0ZXdheSgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIHJvbGU9IiQyIgogICAgbG9jYWwgLW4gY29uZl9maWxlPSIkMyIKICAgIGxvY2FsIC1uIG5ldHdvcms9IiQ0IgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLWdhdGV3YXkgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tZ2F0ZXdheScKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLWdhdGV3YXkuc2VydmljZScKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9JHthcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lfQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfRkVBVFVSRVMgXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtcCA4MDo4MDgwIFwKICAtcCA4MDgxOjgwODEgXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICAke3JvbGUsLH0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAiCgogICAgd3JpdGVfZmlsZSBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwCiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgUlAgY29udGFpbmVyIGltYWdlCiMgMikgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgVk1TUyByb2xlCiMgMykgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nOyBhcm8gcnAgZW52aXJvbm1lbnQgZmlsZQojIDQpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gcm9sZT0iJDIiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDQiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tcnAgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fcnBfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXJwJwoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1ycC5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcnBfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0ke2Fyb19ycF9jb25mX2ZpbGVuYW1lfQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0kbmV0d29yayBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICAke3JvbGUsLH0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3JwX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19tb25pdG9yKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbW9uaXRvciBzZXJ2aWNlIgoKICAgICMgRE9NQUlOX05BTUUsIENMVVNURVJfTURTRF9BQ0NPVU5ULCBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04sIEdBVEVXQVlfRE9NQUlOUywgR0FURVdBWV9SRVNPVVJDRUdST1VQLCBNRFNEX0VOVklST05NRU5UIENMVVNURVJfTURTRF9OQU1FU1BBQ0UKICAgICMgYXJlIG5vdCB1c2VkLCBidXQgY2FuJ3QgZWFzaWx5IGJlIHJlZmFjdG9yZWQgb3V0LiBTaG91bGQgYmUgcmV2aXNpdGVkIGluIHRoZSBmdXR1cmUuCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3InCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9GUF9DTElFTlRfSUQ9JyRGUENMSUVOVElEJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKTURTRF9FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpDTFVTVEVSX01ETV9BQ0NPVU5UPSckQ0xVU1RFUk1ETUFDQ09VTlQnCkNMVVNURVJfTURNX05BTUVTUEFDRT1CQk0KREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPUJCTQpSUElNQUdFPSckaW1hZ2UnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1vbml0b3Iuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbW9uaXRvcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0kbmV0d29yayBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtbSAyLjVnIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICBtb25pdG9yClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFybyBwb3J0YWwgc2VydmljZSIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcG9ydGFsJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9QT1JUQUxfQUNDRVNTX0dST1VQX0lEUz0nJFBPUlRBTEFDQ0VTU0dST1VQSURTJwpBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEPSckUE9SVEFMQ0xJRU5USUQnCkFaVVJFX1BPUlRBTF9FTEVWQVRFRF9HUk9VUF9JRFM9JyRQT1JUQUxFTEVWQVRFREdST1VQSURTJwpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpLRVlWQVVMVF9QUkVGSVg9JyRLRVlWQVVMVFBSRUZJWCcKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9UG9ydGFsClBPUlRBTF9IT1NUTkFNRT0nJExPQ0FUSU9OLmFkbWluLiRSUFBBUkVOVERPTUFJTk5BTUUnClJQSU1BR0U9JyRpbWFnZSciCgogICAgd3JpdGVfZmlsZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tcG9ydGFsLnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWw9MAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tcG9ydGFsCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtZSBBWlVSRV9QT1JUQUxfQUNDRVNTX0dST1VQX0lEUyBcCiAgLWUgQVpVUkVfUE9SVEFMX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUyBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBQT1JUQUxfSE9TVE5BTUUgXAogIC1tIDJnIFwKICAtcCA0NDQ6ODQ0NCBcCiAgLXAgMjIyMjoyMjIyIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICBwb3J0YWwKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QKIyBhcmdzOgojIDEpIG1vbml0b3Jpbmdfcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgMikgbW9uaXRvcl9jb25maWdfdmVyc2lvbiAtIG5hbWVyZWYsIHN0cmluZzsgbWRzZCBjb25maWcgdmVyc2lvbgpjb25maWd1cmVfc2VydmljZV9tZHNkKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBtb25pdG9yX2NvbmZpZ192ZXJzaW9uPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgImNvbmZpZ3VyaW5nIG1kc2Qgc2VydmljZSIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgbG9jYWwgLXIgbWRzZF9zZXJ2aWNlX2Rpcj0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZHNkLnNlcnZpY2UuZCIKICAgIG1rZGlyIC1wICIkbWRzZF9zZXJ2aWNlX2RpciIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZT0iJG1kc2Rfc2VydmljZV9kaXIvb3ZlcnJpZGUuY29uZiIKICAgIGxvY2FsIC1yIG1kc2RfY2VydGlmaWNhdGVfc2FuPSIkKG9wZW5zc2wgeDUwOSAtaW4gL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUvbWRzZC5wZW0gLW5vb3V0IC1zdWJqZWN0IHwgc2VkIC1lICdzLy4qQ04gPSAvLycpIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC9tZHNkIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZT0iTURTRF9ST0xFX1BSRUZJWD0vdmFyL3J1bi9tZHNkL2RlZmF1bHQKTURTRF9PUFRJT05TPVwiLUEgLWQgLXIgXCRNRFNEX1JPTEVfUFJFRklYXCIKCmV4cG9ydCBNT05JVE9SSU5HX0dDU19FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FDQ09VTlQ9JyRSUE1EU0RBQ0NPVU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfUkVHSU9OPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0CmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEPSckbWRzZF9jZXJ0aWZpY2F0ZV9zYW4nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19OQU1FU1BBQ0U9JyRSUE1EU0ROQU1FU1BBQ0UnCmV4cG9ydCBNT05JVE9SSU5HX0NPTkZJR19WRVJTSU9OPSckbW9uaXRvcl9jb25maWdfdmVyc2lvbicKZXhwb3J0IE1PTklUT1JJTkdfVVNFX0dFTkVWQV9DT05GSUdfU0VSVklDRT10cnVlCgpleHBvcnQgTU9OSVRPUklOR19URU5BTlQ9JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfUk9MRT0nJHJvbGUnCmV4cG9ydCBNT05JVE9SSU5HX1JPTEVfSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCgpleHBvcnQgTURTRF9NU0dQQUNLX1NPUlRfQ09MVU1OUz1cIjFcIiIKCiAgICB3cml0ZV9maWxlIGRlZmF1bHRfbWRzZF9maWxlbmFtZSBkZWZhdWx0X21kc2RfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0CiMgYXJnczoKIyAxKSBjb25mX2ZpbGUgLSBzdHJpbmc7IGZsdWVuYml0IGNvbmZpZ3VyYXRpb24gZmlsZQojIDIpIGltYWdlIC0gc3RyaW5nOyBmbHVlbnRiaXQgY29udGFpbmVyIGltYWdlIHRvIHJ1bgojIDMpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0KCkgewogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQxIgogICAgbG9jYWwgLW4gaW1hZ2U9IiQyIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBmbHVlbnRiaXQgc2VydmljZSIKCiAgICBta2RpciAtcCAvZXRjL2ZsdWVudGJpdC8KICAgIG1rZGlyIC1wIC92YXIvbGliL2ZsdWVudAoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgY29uZl9maWxlbmFtZT0nL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYnCiAgICB3cml0ZV9maWxlIGNvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvZmx1ZW50Yml0JwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBzeXNjb25maWdfZmlsZT0iRkxVRU5UQklUSU1BR0U9JGltYWdlIgoKICAgIHdyaXRlX2ZpbGUgc3lzY29uZmlnX2ZpbGVuYW1lIHN5c2NvbmZpZ19maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHNlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vZmx1ZW50Yml0LnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHNlcnZpY2VfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsU2VjPTAKCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0tc2VjdXJpdHktb3B0IGxhYmVsPWRpc2FibGUgXAogIC0tZW50cnlwb2ludCAvb3B0L3RkLWFnZW50LWJpdC9iaW4vdGQtYWdlbnQtYml0IFwKICAtLW5ldD1ob3N0IFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLXYgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmY6L2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYgXAogIC12IC92YXIvbGliL2ZsdWVudDovdmFyL2xpYi9mbHVlbnQ6eiBcCiAgLXYgL3Zhci9sb2cvam91cm5hbDovdmFyL2xvZy9qb3VybmFsOnJvIFwKICAtdiAvZXRjL21hY2hpbmUtaWQ6L2V0Yy9tYWNoaW5lLWlkOnJvIFwKICAkaW1hZ2UgXAogIC1jIC9ldGMvZmx1ZW50Yml0L2ZsdWVudGJpdC5jb25mCgpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTUKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIHNlcnZpY2VfZmlsZW5hbWUgc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfdGltZXJzX21kbV9tZHNkCiMgYXJnczoKIyAxKSByb2xlIC0gc3RyaW5nOyBjYW4gYmUgImdhdGV3YXkiIG9yICJycCIKY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCgpIHsKICAgIGxvY2FsIC1uIHJvbGU9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgbG9jYWwga2V5dmF1bHRfc3VmZml4IHNlY3JldF9wcmVmaXgKICAgIGdldF9rZXl2YXVsdF9zdWZmaXggcm9sZSBrZXl2YXVsdF9zdWZmaXggc2VjcmV0X3ByZWZpeAoKICAgIGZvciB2YXIgaW4gIm1kc2QiICJtZG0iOyBkbwogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy5zZXJ2aWNlIgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaAoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2ggJHZhciIKCiAgICAgICAgd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZSB0cnVlCgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL2Rvd25sb2FkLSR2YXItY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaApBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbVGltZXJdCk9uQm9vdFNlYz0wbWluCk9uQ2FsZW5kYXI9MC8xMjowMDowMApBY2N1cmFjeVNlYz01cwoKW0luc3RhbGxdCldhbnRlZEJ5PXRpbWVycy50YXJnZXQiCgogICAgICAgIHdyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZSB0cnVlCiAgICBkb25lCgogICAgbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lPSIvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGU9IiMhL2Jpbi9iYXNoCnNldCAtZXUKCkNPTVBPTkVOVD1cJDEKZWNobyBcIkRvd25sb2FkIFwkQ09NUE9ORU5UIGNyZWRlbnRpYWxzXCIKClRFTVBfRElSPVwiXCQobWt0ZW1wIC1kKVwiCmV4cG9ydCBBWlVSRV9DT05GSUdfRElSPVwiXCQobWt0ZW1wIC1kKVwiCgplY2hvIFwiTG9nZ2luZyBpbnRvIEF6dXJlLi4uXCIKUkVUUklFUz0zCndoaWxlIFtbIFwkUkVUUklFUyAtZ3QgMCBdXTsgZG8KICAgIGlmIGF6IGxvZ2luIC1pIC0tYWxsb3ctbm8tc3Vic2NyaXB0aW9ucwogICAgdGhlbgogICAgICAgIGVjaG8gXCJheiBsb2dpbiBzdWNjZXNzZnVsXCIKICAgICAgICBicmVhawogICAgZWxzZQogICAgICAgIGVjaG8gXCJheiBsb2dpbiBmYWlsZWQuIFJldHJ5aW5nLi4uXCIKICAgICAgICBsZXQgUkVUUklFUy09MQogICAgICAgIHNsZWVwIDUKICAgIGZpCmRvbmUKCnRyYXAgXCJjbGVhbnVwXCIgRVhJVAoKY2xlYW51cCgpIHsKICBheiBsb2dvdXQKICBbWyBcJFRFTVBfRElSID1+IC90bXAvLisgXV0gJiYgcm0gLXJmIFwkVEVNUF9ESVIKICBbWyBcJEFaVVJFX0NPTkZJR19ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRBWlVSRV9DT05GSUdfRElSCn0KCmlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZG1cIiBdXTsgdGhlbgogIENVUlJFTlRfQ0VSVF9GSUxFPVwiL2V0Yy9tZG0ucGVtXCIKZWxpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbVwiCmVsc2UKICBlY2hvIEludmFsaWQgdXNhZ2UgJiYgZXhpdCAxCmZpCgpTRUNSRVRfTkFNRT1cIiRzZWNyZXRfcHJlZml4LVwke0NPTVBPTkVOVH1cIgpORVdfQ0VSVF9GSUxFPVwiXCRURU1QX0RJUi9cJENPTVBPTkVOVC5wZW1cIgpmb3IgYXR0ZW1wdCBpbiB7MS4uNX07IGRvCiAgYXoga2V5dmF1bHQgXAogICAgc2VjcmV0IFwKICAgIGRvd25sb2FkIFwKICAgIC0tZmlsZSBcIlwkTkVXX0NFUlRfRklMRVwiIFwKICAgIC0taWQgXCJodHRwczovLyRLRVlWQVVMVFBSRUZJWC0ka2V5dmF1bHRfc3VmZml4LiRLRVlWQVVMVEROU1NVRkZJWC9zZWNyZXRzL1wkU0VDUkVUX05BTUVcIiBcCiAgICAmJiBicmVhawogIGlmIFtbIFwkYXR0ZW1wdCAtbHQgNSBdXTsgdGhlbiBzbGVlcCAxMDsgZWxzZSBleGl0IDE7IGZpCmRvbmUKCmlmIFsgLWYgXCRORVdfQ0VSVF9GSUxFIF07IHRoZW4KICBpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgICBjaG93biBzeXNsb2c6c3lzbG9nIFwkTkVXX0NFUlRfRklMRQogIGVsc2UKICAgIHNlZCAtaSAtbmUgJzEsL0VORCBDRVJUSUZJQ0FURS8gcCcgXCRORVdfQ0VSVF9GSUxFCiAgZmkKCiAgbmV3X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRORVdfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBjdXJyZW50X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRDVVJSRU5UX0NFUlRfRklMRVwiIC1ub291dCAtc2VyaWFsIHwgYXdrIC1GPSAne3ByaW50IFwkMn0nKVwiCiAgaWYgW1sgISAteiBcJG5ld19jZXJ0X3NuIF1dICYmIFtbIFwkbmV3X2NlcnRfc24gIT0gXCJcJGN1cnJlbnRfY2VydF9zblwiIF1dOyB0aGVuCiAgICBlY2hvIHVwZGF0aW5nIGNlcnRpZmljYXRlIGZvciBcJENPTVBPTkVOVAogICAgY2htb2QgMDYwMCBcJE5FV19DRVJUX0ZJTEUKICAgIG12IFwkTkVXX0NFUlRfRklMRSBcJENVUlJFTlRfQ0VSVF9GSUxFCiAgZmkKZWxzZQogIGVjaG8gRmFpbGVkIHRvIHJlZnJlc2ggY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UICYmIGV4aXQgMQpmaSIKCiAgICB3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZSB0cnVlCgogICAgY2htb2QgdSt4IC91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoCgogICAgJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZHNkICYKICAgIHdhaXQgIiQhIgoKCiAgICAkZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kbSAmCiAgICB3YWl0ICIkISIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5zZXJ2aWNlIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249V2F0Y2ggZm9yIGNoYW5nZXMgaW4gbWRtLnBlbSBhbmQgcmVzdGFydHMgdGhlIG1kbSBzZXJ2aWNlCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzdGFydCBtZG0uc2VydmljZQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWUgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZT0nL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0vd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGU9J1tQYXRoXQpQYXRoTW9kaWZpZWQ9L2V0Yy9tZG0ucGVtCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCgogICAgd3JpdGVfZmlsZSB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZSB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlIHRydWUKCiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHM9J3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAiJHdhdGNoX21kbV9jcmVkcyIgfHwgYWJvcnQgImZhaWxlZCB0byBlbmFibGUgYW5kIHN0YXJ0ICR3YXRjaF9tZG1fY3JlZHMiCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfbWRtCiMgYXJnczoKIyAxKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBjYW4gYmUgImdhdGV3YXkiIG9yICJycCIKIyAyKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgbWRtIGNvbnRhaW5lciBpbWFnZSB0byBydW4KIyAzKSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX21kbSgpIHsKICAgIGxvY2FsIC1uIHJvbGU9IiQxIgogICAgbG9jYWwgLW4gaW1hZ2U9IiQyIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBtZG0gc2VydmljZSIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGVuYW1lPSIvZXRjL3N5c2NvbmZpZy9tZG0iCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19tZG1fZmlsZT0iTURNRlJPTlRFTkRVUkw9JyRNRE1GUk9OVEVORFVSTCcKTURNSU1BR0U9JyRpbWFnZScKTURNU09VUkNFRU5WSVJPTk1FTlQ9JyRMT0NBVElPTicKTURNU09VUkNFUk9MRT0nJHJvbGUnCk1ETVNPVVJDRVJPTEVJTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIiCgogICAgd3JpdGVfZmlsZSBzeXNjb25maWdfbWRtX2ZpbGVuYW1lIHN5c2NvbmZpZ19tZG1fZmlsZSB0cnVlCgogICAgbWtkaXIgLXAgL3Zhci9ldHcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vbWRtLnNlcnZpY2UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kbV9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL21kbQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1lbnRyeXBvaW50IC91c3Ivc2Jpbi9NZXRyaWNzRXh0ZW5zaW9uIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtbSAyZyBcCiAgLXYgL2V0Yy9tZG0ucGVtOi9ldGMvbWRtLnBlbSBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJGltYWdlIFwKICAtQ2VydEZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtRnJvbnRFbmRVcmwgJE1ETUZST05URU5EVVJMIFwKICAtTG9nZ2VyIENvbnNvbGUgXAogIC1Mb2dMZXZlbCBXYXJuaW5nIFwKICAtUHJpdmF0ZUtleUZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtU291cmNlRW52aXJvbm1lbnQgJExPQ0FUSU9OIFwKICAtU291cmNlUm9sZSAkcm9sZSBcCiAgLVNvdXJjZVJvbGVJbnN0YW5jZSAkSE9TVE5BTUUKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBtZG1fc2VydmljZV9maWxlbmFtZSBtZG1fc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfdm1zc19hcm9fc2VydmljZQojIGFyZ3M6CiMgMSkgciAtIG5hbWVyZWYsIHN0cmluZzsgcm9sZSBvZiBWTVNTCiMgMikgaW1hZ2VzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IEFSTyBjb250YWluZXIgaW1hZ2VzCiMgMykgY29uZmlncyAtIG5hbWVyZWYsIGFzc29jaWF0aXZlIGFycmF5OyBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB2ZXJzaW9ucy4gVGhlIHZhbHVlcyBzaG91bGQgYmUgYSByZWZlcmVuY2UgdG8gdmFyaWFibGVzLCBub3QgZGVyZWZlcmVuY2VkLgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgbmFtZXJlZiB2YXJpYWJsZXMgYnkgaGVscGVyIGZ1bmN0aW9ucy4KY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzKCkgewogICAgbG9jYWwgLW4gcj0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZXM9IiQyIgogICAgbG9jYWwgLW4gY29uZmlncz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgdmVyaWZ5X3JvbGUgIiQxIgoKICAgIGlmIFsgIiRyIiA9PSAiJHJvbGVfZ2F0ZXdheSIgXTsgdGhlbgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5ICIke2ltYWdlc1sicnAiXX0iICIkMSIgIiR7Y29uZmlnc1siZ2F0ZXdheV9jb25maWciXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICAgICAgY29uZmlndXJlX2NlcnRzX2dhdGV3YXkKICAgIGVsaWYgWyAiJHIiID09ICIkcm9sZV9ycCIgXTsgdGhlbgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19ycCAiJHtpbWFnZXNbInJwIl19IiAiJDEiICIke2NvbmZpZ3NbInJwX2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwgIiR7aW1hZ2VzWyJycCJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgICAgICBjb25maWd1cmVfY2VydHNfcnAKICAgIGZpCgogICAgY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0ICIke2NvbmZpZ3NbImZsdWVudGJpdCJdfSIgIiR7aW1hZ2VzWyJmbHVlbnRiaXQiXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICBjb25maWd1cmVfdGltZXJzX21kbV9tZHNkICIkMSIKICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX21kbSAiJDEiICIke2ltYWdlc1sibWRtIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRzZCAiJDEiICIke2NvbmZpZ3NbIm1kc2QiXX0iCiAgICBydW5fYXpzZWNkX2NvbmZpZ19zY2FuCn0KCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKIyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgc291cmNlZCBieSBib290c3RyYXBwaW5nIHNjcmlwdHMgZm9yIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zCgojIGdldF9ib290X2Rldl91dWlkCiMgR2V0IHRoZSBib290IGRldmljZXMgdXVpZAojIGFyZ3M6CiMgMSkgYm9vdF9kZXZfdXVpZCAtIG5hbWVyZWYsIHN0cmluZzsgRW1wdHkgdmFyaWFibGUgZm9yIGJvb3QgZGV2aWNlIHV1aWQgYXNzaWdubWVudAojIFRha2VuIGFuZCByZWZhY3RvcmVkIGZyb20gaHR0cHM6Ly9lbmcubXMvZG9jcy9wcm9kdWN0cy9henVyZS1saW51eC9mZWF0dXJlcy9zZWN1cml0eS9maXBzCmdldF9ib290X2Rldl91dWlkKCkgewogICAgbG9jYWwgLW4gYm9vdF9kZXZfdXVpZD0iJDEiCiAgICAjIFNldCBib290X3V1aWQgdmFyaWFibGUgZm9yIHRoZSBib290IHBhcnRpdGlvbiBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcm9vdAogICAgYm9vdF9kZXY9IiQoZGYgL2Jvb3QvIHwgdGFpbCAtMSB8IGN1dCAtZCcgJyAtZjEpIgogICAgcm9vdF9kZXY9IiQoZGYgLyB8IHRhaWwgLTEgfCBjdXQgLWQnICcgLWYxKSIKCiAgICBib290X2Rldl91dWlkPSIkcm9vdF9kZXYiCiAgICBpZiBbICIkYm9vdF9kZXYiICE9ICIkcm9vdF9kZXYiIF07IHRoZW4KICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBib290X2Rldl91dWlkPSJib290PVVVSUQ9JChibGtpZCAiJGJvb3RfZGV2IiAtcyBVVUlEIC1vIHZhbHVlKSIKICAgIGZpCn0KCiMgZmlwc192ZXJpZnkKIyBWZXJpZnkgdGhhdCBmaXBzIG1vZGUgaXMgZW5hYmxlZAojIFRha2VuIGFuZCByZWZhY3RvcmVkIGZyb20gaHR0cHM6Ly9lbmcubXMvZG9jcy9wcm9kdWN0cy9henVyZS1saW51eC9mZWF0dXJlcy9zZWN1cml0eS9maXBzCmZpcHNfdmVyaWZ5KCkgewogICAgZmlwc19lbmFibGVkX3Byb2M9IiQoY2F0IC9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFibGVkKSIKICAgIGZpcHNfZW5hYmxlZF9zeXNjdGw9IiQoc3lzY3RsIC1uIGNyeXB0by5maXBzX2VuYWJsZWQpIgogICAgaWYgWyAiJGZpcHNfZW5hYmxlZF9wcm9jIiAtbmUgMSBdIHx8IFsgIiRmaXBzX2VuYWJsZWRfc3lzY3RsIiAtbmUgMSBdOyB0aGVuCiAgICAgICAgYWJvcnQgIkZJUFMgbW9kZSBpcyBkaXNhYmxlZCIKICAgIGZpCgogICAgbG9nICJGSVBTIG1vZGUgaXMgZW5hYmxlZCIKfQoKIyBmaXBzX2NvbmZpZ3VyZQojIENvbmZpZ3VyZXMgVk0gdG8gcnVuIHdpdGggZmlwcyBtb2RlIGVuYWJsZWQKIyBUYWtlbiBhbmQgcmVmYWN0b3JlZCBmcm9tIGh0dHBzOi8vZW5nLm1zL2RvY3MvcHJvZHVjdHMvYXp1cmUtbGludXgvZmVhdHVyZXMvc2VjdXJpdHkvZmlwcwojIFRPRE8gcmVtb3ZlIHRoaXMgb25jZSBza3UgY2JsLW1hcmluZXItMi1nZW4yLWZpcHMgaXMgc3VwcG9ydGVkIGJ5IGF1dG9tYXRpYyBPUyB1cGRhdGVzCiMgUmVmZXJlbmNlOiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMtYXV0b21hdGljLXVwZ3JhZGUjc3VwcG9ydGVkLW9zLWltYWdlcwpmaXBzX2NvbmZpZ3VyZSgpIHsKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgYm9vdF91dWlkCiAgICBnZXRfYm9vdF9kZXZfdXVpZCBib290X3V1aWQKCiAgICBsb2NhbCBncnViMl9lbnYKICAgIGlmIGdydWIyX2Vudj0iJChncnViMi1lZGl0ZW52IC0gbGlzdCB8IGdyZXAga2VybmVsb3B0cykiOyB0aGVuCiAgICAgICAgZ3J1YjItZWRpdGVudiAtIHNldCAiJGdydWIyX2VudiBmaXBzPTEgJGJvb3RfdXVpZCIKICAgIGVsc2UKICAgICAgICBncnViYnkgLS11cGRhdGUta2VybmVsPUFMTCAtLWFyZ3M9ImZpcHM9MSAkYm9vdF91dWlkIgogICAgZmkKCiAgICAjIGZpcHMgbW9kZSB2ZXJpZmljYXRpb24gd2lsbCBmYWlsIHVudGlsIGFmdGVyIHRoZSB2bSBoYXMgYmVlbiByZWJvb3RlZAogICAgIyBmaXBzX3ZlcmlmeQp9CgojIGNvbmZpZ3VyZV9zc2hkCiMgV2UgbmVlZCB0byBjb25maWd1cmUgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB0byB5ZXMgaW4gb3JkZXIgZm9yIHRoZSBWTVNTIEFjY2VzcyBKSVQgdG8gd29yawpjb25maWd1cmVfc3NoZCgpIHsKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2NhbCAtciBzc2hkX2NvbmZpZz0iL2V0Yy9zc2gvc3NoZF9jb25maWciCgogICAgbG9nICJFZGl0aW5nICRzc2hkX2NvbmZpZyB0byBhbGxvdyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiIKICAgIHNlZCAtaSAncy9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIG5vL1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzL2cnICIkc3NoZF9jb25maWciCgogICAgc3lzdGVtY3RsIHJlbG9hZCBzc2hkLnNlcnZpY2UgfHwgYWJvcnQgInNzaGQgZmFpbGVkIHRvIHJlbG9hZCIKfQoKIyBjb25maWd1cmVfbG9ncm90YXRlIGNsb2JiZXJzIC9ldGMvbG9ncm90YXRlLmNvbmYKIyBhcmdzOgojIDEpIGRyb3Bpbl9maWxlcyAtIG5hbWVyZWYsIGFzc29jaWF0aXZlIGFycmF5LCBvcHRpb25hbDsgbG9ncm90YXRlIGZpbGVzIHRvIHdyaXRlIHRvIC9ldGMvbG9ncm90YXRlLmQKIyAgICAgICBLZXkgbmFtZSBkaWN0YXRlcyBmaWxlbmFtZXMgd3JpdHRlbiB0byAvZXRjL2xvZ3JvdGF0ZS5kLgojIEV4YW1wbGU6IAojICAgS2V5IGRpY3RhdGVzIHRoZSBmaWxlbmFtZSB3cml0dGVuIGluIC9ldGMvbG9ncm90YXRlLmQKIyAgIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKIyAgIGxvY2FsIC1yQSBsb2dyb3RhdGVfZHJvcGlucz0oCiMgICAgICBbImdhdGV3YXkiXT0iJGdhdGV3YXlfbG9nX2ZpbGUiCiMgICApCmNvbmZpZ3VyZV9sb2dyb3RhdGUoKSB7CiAgICBsb2NhbCAtbiBkcm9waW5fZmlsZXM9IiR7MTotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlbmFtZT0nL2V0Yy9sb2dyb3RhdGUuY29uZicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbG9ncm90YXRlX2NvbmZfZmlsZT0nIyBzZWUgIm1hbiBsb2dyb3RhdGUiIGZvciBkZXRhaWxzCiMgcm90YXRlIGxvZyBmaWxlcyB3ZWVrbHkKd2Vla2x5CgojIGtlZXAgMiB3ZWVrcyB3b3J0aCBvZiBiYWNrbG9ncwpyb3RhdGUgMgoKIyBjcmVhdGUgbmV3IChlbXB0eSkgbG9nIGZpbGVzIGFmdGVyIHJvdGF0aW5nIG9sZCBvbmVzCmNyZWF0ZQoKIyB1c2UgZGF0ZSBhcyBhIHN1ZmZpeCBvZiB0aGUgcm90YXRlZCBmaWxlCmRhdGVleHQKCiMgdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgeW91ciBsb2cgZmlsZXMgY29tcHJlc3NlZApjb21wcmVzcwoKIyBSUE0gcGFja2FnZXMgZHJvcCBsb2cgcm90YXRpb24gaW5mb3JtYXRpb24gaW50byB0aGlzIGRpcmVjdG9yeQppbmNsdWRlIC9ldGMvbG9ncm90YXRlLmQKCiMgbm8gcGFja2FnZXMgb3duIHd0bXAgYW5kIGJ0bXAgLS0gd2Ugd2lsbCByb3RhdGUgdGhlbSBoZXJlCi92YXIvbG9nL3d0bXAgewogICAgbW9udGhseQogICAgY3JlYXRlIDA2NjQgcm9vdCB1dG1wCiAgICAgICAgbWluc2l6ZSAxTQogICAgcm90YXRlIDEKfQoKL3Zhci9sb2cvYnRtcCB7CiAgICBtaXNzaW5nb2sKICAgIG1vbnRobHkKICAgIGNyZWF0ZSAwNjAwIHJvb3QgdXRtcAogICAgcm90YXRlIDEKfScKCiAgICB3cml0ZV9maWxlIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lIGxvZ3JvdGF0ZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIGlmIFsgLW4gIiR7ZHJvcGluX2ZpbGVzWypdfSIgXTsgdGhlbgogICAgICAgIGxvY2FsIC1yIGxvZ3JvdGF0ZV9kPSIvZXRjL2xvZ3JvdGF0ZS5kIgogICAgICAgIGxvZyAiV3JpdGluZyBsb2dyb3RhdGUgZmlsZXMgdG8gJGxvZ3JvdGF0ZV9kIgogICAgICAgIGZvciBkcm9waW5fbmFtZSBpbiAiJHshZHJvcGluX2ZpbGVzW0BdfSI7IGRvCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZW5hbWU9IiRsb2dyb3RhdGVfZC8kZHJvcGluX25hbWUiCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZT0iJHtkcm9waW5fZmlsZXNbIiRkcm9waW5fbmFtZSJdfSIKICAgICAgICAgICAgd3JpdGVfZmlsZSBkcm9waW5fZmlsZW5hbWUgZHJvcGluX2ZpbGUgdHJ1ZQogICAgICAgIGRvbmUKICAgIGZpCn0KCiMgcHVsbF9jb250YWluZXJfaW1hZ2VzCiMgYXJnczoKIyAxKSBwdWxsX2ltYWdlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheQojIDIpIHJlZ2lzdHJ5X2NvbmYgLSBuYW1lcmVmLCBzdHJpbmcsIG9wdGlvbmFsOyBwYXRoIHRvIGRvY2tlci9wb2RtYW4gY29uZmlndXJhdGlvbiBmaWxlCnB1bGxfY29udGFpbmVyX2ltYWdlcygpIHsKICAgIGxvY2FsIC1uIHB1bGxfaW1hZ2VzPSIkMSIKICAgIGxvY2FsIC1uIHJlZ2lzdHJ5X2NvbmY9IiR7MjotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmkgcmV0cnlfdGltZT0zMAogICAgIyBUaGUgbWFuYWdlZCBpZGVudGl0eSB0aGF0IHRoZSBWTSBydW5zIGFzIG9ubHkgaGFzIGEgc2luZ2xlIHJvbGVhc3NpZ25tZW50LgogICAgIyBUaGlzIHJvbGUgYXNzaWdubWVudCBpcyBBQ1JQdWxsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSBwcmVzZW50IGluIHRoZQogICAgIyBzdWJzY3JpcHRpb24gd2UncmUgZGVwbG95aW5nIGludG8uICBJZiB0aGUgaWRlbnRpdHkgZG9lcyBub3QgaGF2ZSBhbnkKICAgICMgcm9sZSBhc3NpZ25tZW50cyBzY29wZWQgb24gdGhlIHN1YnNjcmlwdGlvbiB3ZSdyZSBkZXBsb3lpbmcgaW50bywgaXQgd2lsbAogICAgIyBub3Qgc2hvdyBvbiBheiBsb2dpbiAtaSwgd2hpY2ggaXMgd2h5IHRoZSBiZWxvdyBsaW5lIGlzIGNvbW1lbnRlZC4KICAgICMgYXogYWNjb3VudCBzZXQgLXMgIiRTVUJTQ1JJUFRJT05JRCIKICAgIGNtZD0oCiAgICAgICAgYXoKICAgICAgICBsb2dpbgogICAgICAgIC1pCiAgICAgICAgLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zCiAgICApCgogICAgbG9nICJSdW5uaW5nIGF6IGxvZ2luIHdpdGggcmV0cmllcyIKICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCgogICAgIyBTdXBwcmVzcyBlbXVsYXRpb24gb3V0cHV0IGZvciBwb2RtYW4gaW5zdGVhZCBvZiBkb2NrZXIgZm9yIGF6IGFjciBjb21wYXRhYmlsaXR5CiAgICBta2RpciAtcCAvZXRjL2NvbnRhaW5lcnMvCiAgICBta2RpciAtcCAvcm9vdC8uZG9ja2VyCiAgICB0b3VjaCAvZXRjL2NvbnRhaW5lcnMvbm9kb2NrZXIKCiAgICAjIFRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSBjYXNlIHRoYXQgYXogYWNyIGxvZ2luIHNlYXJjaGVzIGZvciB0aGlzIGluIGl0J3MgZW52aXJvbm1lbnQKICAgIGV4cG9ydCBSRUdJU1RSWV9BVVRIX0ZJTEU9Ii9yb290Ly5kb2NrZXIvY29uZmlnLmpzb24iCiAgICAKICAgIGlmIFsgLW4gIiR7cmVnaXN0cnlfY29uZn0iIF07IHRoZW4KICAgICAgICB3cml0ZV9maWxlIFJFR0lTVFJZX0FVVEhfRklMRSByZWdpc3RyeV9jb25mIHRydWUKICAgIGZpCgogICAgbG9nICJsb2dnaW5nIGludG8gcHJvZCBhY3IiCiAgICBjbWQ9KAogICAgICAgIGF6CiAgICAgICAgYWNyCiAgICAgICAgbG9naW4KICAgICAgICAtLW5hbWUKICAgICAgICAjIFRPRE8gcmVwbGFjZSB0aGlzIHdpdGggdmFyaWFibGUgZXhwYW5zaW9uCiAgICAgICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vd3d3LnNoZWxsY2hlY2submV0L3dpa2kvU0MyMDAxCiAgICAgICAgIiQoc2VkIC1lICdzfC4qL3x8JyA8PDwiJEFDUlJFU09VUkNFSUQiKSIKICAgICkKCiAgICByZXRyeSBjbWQgcmV0cnlfdGltZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIGkgaW4gJHtwdWxsX2ltYWdlc1tAXX07IGRvCiAgICAgICAgbG9jYWwgLW4gaW1hZ2U9IiRpIgogICAgICAgIGNtZD0oCiAgICAgICAgICAgIHBvZG1hbgogICAgICAgICAgICBwdWxsCiAgICAgICAgICAgICIkaW1hZ2UiCiAgICAgICAgKQoKICAgICAgICBsb2cgIlB1bGxpbmcgaW1hZ2UgJGltYWdlIHdpdGggcmV0cmllcyBub3ciCiAgICAgICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKICAgIGRvbmUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGNtZD0oCiAgICAgICAgYXoKICAgICAgICBsb2dvdXQKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9nb3V0IHdpdGggcmV0cmllcyIKICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCn0KCiMgY29uZmlndXJlX2NlcnRzX2dlbmVyYWwgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgY29tbW9uIHRvIGFsbCBWTVNTIGluc3RhbmNlcwpjb25maWd1cmVfY2VydHNfZ2VuZXJhbCgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzZXR0aW5nIE1PTklUT1JJTkdfR0NTX0FVVEhfSURfVFlQRT1BdXRoS2V5VmF1bHQgc2VlbXMgdG8gaGF2ZSBjYXVzZWQgbWRzZCBub3QKICAgICMgdG8gaG9ub3VyIFNTTF9DRVJUX0ZJTEUgYW55IG1vcmUsIGhlYXZlbiBvbmx5IGtub3dzIHdoeS4KICAgIGxvY2FsIC1yIHNzbF9jZXJ0c19iYXNlZGlyPSIvdXNyL2xpYi9zc2wvY2VydHMiCiAgICBta2RpciAtcCAiJHNzbF9jZXJ0c19iYXNlZGlyIgogICAgY3NwbGl0IC1mICIkc3NsX2NlcnRzX2Jhc2VkaXIvY2VydC0iIC1iICUwM2QucGVtIC9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0IC9eJC8xICJ7Kn0iIDE+L2Rldi9udWxsCiAgICBjX3JlaGFzaCAiJHNzbF9jZXJ0c19iYXNlZGlyIgp9CgojIGNvbmZpZ3VyZV9jZXJ0c19ycCBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBmb3IgUlAgVk1TUwojIGFyZ3M6CmNvbmZpZ3VyZV9jZXJ0c19ycCgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZV9ycAoKICAgIGxvY2FsIC1yIHJwX2NlcnRzX2Jhc2VkaXI9Ii9ldGMvYXJvLXJwIgogICAgbWtkaXIgLXAgIiRycF9jZXJ0c19iYXNlZGlyIgogICAgYmFzZTY0IC1kIDw8PCIkQURNSU5BUElDQUJVTkRMRSIgPiAiJHJwX2NlcnRzX2Jhc2VkaXIvYWRtaW4tY2EtYnVuZGxlLnBlbSIKICAgIGlmIFtbIC1uICIkQVJNQVBJQ0FCVU5ETEUiIF1dOyB0aGVuCiAgICBiYXNlNjQgLWQgPDw8IiRBUk1BUElDQUJVTkRMRSIgPiAiJHJwX2NlcnRzX2Jhc2VkaXIvYXJtLWNhLWJ1bmRsZS5wZW0iCiAgICBmaQogICAgY2hvd24gLVIgMTAwMDoxMDAwICIkcnBfY2VydHNfYmFzZWRpciIKCiAgICBjb25maWd1cmVfY2VydHNfZ2VuZXJhbAp9CgojIGNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5IENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGZvciBHYXRld2F5IFZNU1MgaW5zdGFuY2VzCmNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5KCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlX2dhdGV3YXkKICAgIGNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KCiMgY29uZmlndXJlX2NlcnRzX2RldnByb3h5IENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGZvciBkZXZwcm94eSBWTVNTIGluc3RhbmNlcwpjb25maWd1cmVfY2VydHNfZGV2cHJveHkoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGVfZGV2cHJveHkgdHJ1ZQogICAgCiAgICBsb2NhbCAtciBwcm94eV9jZXJ0c19iYXNlZGlyPSIvZXRjL3Byb3h5IgogICAgbWtkaXIgLXAgIiRwcm94eV9jZXJ0c19iYXNlZGlyIgogICAgYmFzZTY0IC1kIDw8PCIkUFJPWFlDRVJUIiA+ICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5jcnQiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUtFWSIgPiAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkua2V5IgogICAgYmFzZTY0IC1kIDw8PCIkUFJPWFlDTElFTlRDRVJUIiA+ICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS1jbGllbnQuY3J0IgogICAgY2hvd24gLVIgMTAwMDoxMDAwIC9ldGMvcHJveHkKICAgIGNobW9kIDA2MDAgIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LmtleSIKfQoKY29uZmlndXJlX2F6c2VjZF9zY2FuKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHdlIGxlYXZlIGNsaWVudElkIGJsYW5rIGFzIGxvbmcgYXMgb25seSAxIG1hbmFnZWQgaWRlbnRpdHkgYXNzaWduZWQgdG8gdm1zcwogICAgIyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxLCB3ZSB3aWxsIG5lZWQgdG8gcG9wdWxhdGUgd2l0aCBjbGllbnRJZCB1c2VkIGZvciBvZmYtbm9kZSBzY2FubmluZwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBub2Rlc2Nhbl9hZ2VudF9maWxlbmFtZT0iL2V0Yy9kZWZhdWx0L3ZzYS1ub2Rlc2Nhbi1hZ2VudC5jb25maWciCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG5vZGVzY2FuX2FnZW50X2ZpbGU9InsKICAgIFwiTmljZVwiOiAxOSwKICAgIFwiVGltZW91dFwiOiAxMDgwMCwKICAgIFwiQ2xpZW50SWRcIjogXCJcIiwKICAgIFwiVGVuYW50SWRcIjogJEFaVVJFU0VDUEFDS1ZTQVRFTkFOVElELAogICAgXCJRdWFseXNTdG9yZUJhc2VVcmxcIjogJEFaVVJFU0VDUEFDS1FVQUxZU1VSTCwKICAgIFwiUHJvY2Vzc1RpbWVvdXRcIjogMzAwLAogICAgXCJDb21tYW5kRGVsYXlcIjogMAogIH0iCgogICAgd3JpdGVfZmlsZSBub2Rlc2Nhbl9hZ2VudF9maWxlbmFtZSBub2Rlc2Nhbl9hZ2VudF9maWxlIHRydWUKfQoKIyBydW5fYXpzZWNkX2NvbmZpZ19zY2FuCnJ1bl9henNlY2RfY29uZmlnX3NjYW4oKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGNvbmZpZ3VyZV9henNlY2Rfc2NhbgoKICAgIGxvY2FsIC1hciBjb25maWdzPSgKICAgICAgICAiYmFzZWxpbmUiCiAgICAgICAgImNsYW1hdiIKICAgICAgICAic29mdHdhcmUiCiAgICApCgogICAgbG9nICJTY2FubmluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggYXpzZWNkICR7Y29uZmlnc1sqXX0iCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBzY2FuIGluICR7Y29uZmlnc1tAXX07IGRvCiAgICAgICAgbG9nICJTY2FubmluZyBjb25maWcgZmlsZSAkc2NhbiBub3ciCiAgICAgICAgL3Vzci9sb2NhbC9iaW4vYXpzZWNkIGNvbmZpZyAtcyAiJHNjYW4iIC1kIFAxRAogICAgZG9uZQp9CgojIGNyZWF0ZV9yZXF1aXJlZF9kaXJzCmNyZWF0ZV9yZXF1aXJlZF9kaXJzKCkgewogICAgY3JlYXRlX2RpcnM9KAogICAgICAgIC92YXIvbG9nL2pvdXJuYWwKICAgICAgICAvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZQogICAgICAgICMgRG9lcyBub3QgZXhpc3Qgb24gZGV2UHJveHlWTVNTCiAgICAgICAgL3Zhci9vcHQvbWljcm9zb2Z0L2xpbnV4bW9uYWdlbnQKICAgICkKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBkIGluICR7Y3JlYXRlX2RpcnNbQF19OyBkbwogICAgICAgIGxvZyAiQ3JlYXRpbmcgZGlyZWN0b3J5ICRkIgogICAgICAgIG1rZGlyIC1wICIkZCIgfHwgYWJvcnQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICRkIgogICAgZG9uZQp9CgojIGNyZWF0ZV9wb2RtYW5fbmV0d29ya3MoKQojIGFyZ3M6CiMgMSkgbmV0cyAtIG5hbWVyZWYsIGFzc29jaWF0aXZlIGFycmF5OyBOZXR3b3JrcyB0byBiZSBjcmVhdGVkCiMgICAgICAgS2V5IGlzIHRoZSBuZXR3b3JrIG5hbWUsIHZhbHVlIGlzIHRoZSBzdWJuZXQgd2l0aCBjaWRyIG5vdGF0aW9uCmNyZWF0ZV9wb2RtYW5fbmV0d29ya3MoKSB7CiAgICBsb2NhbCAtbiBuZXRzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3IgbiBpbiAkeyFuZXRzW0BdfTsgZG8KICAgICAgICBsb2cgIkNyZWF0aW5nIHBvZG1hbiBuZXR3b3JrIFwiJG5cIiB3aXRoIHN1Ym5ldCBcIiR7bmV0c1skbl19XCIiCiAgICAgICAgcG9kbWFuIG5ldHdvcmsgXAogICAgICAgICAgICBjcmVhdGUgXAogICAgICAgICAgICAtLXN1Ym5ldCAiJHtuZXRzWyIkbiJdfSIgXAogICAgICAgICAgICAiJG4iCiAgICBkb25lCn0KCiMgZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kCmZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZCgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9nICJDaGFuZ2luZyBmaXJld2FsbGQgYmFja2VuZCB0byBpcHRhYmxlcyIKICAgIGNvbmZfZmlsZT0iL2V0Yy9maXJld2FsbGQvZmlyZXdhbGxkLmNvbmYiCiAgICBzZWQgLWkgJ3MvRmlyZXdhbGxCYWNrZW5kPW5mdGFibGVzL0ZpcmV3YWxsQmFja2VuZD1pcHRhYmxlcy9nJyAiJGNvbmZfZmlsZSIKfQoKIyBmaXJld2FsbGRfY29uZmlndXJlCiMgYXJnczoKIyAxKSBwb3J0cyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheTsgcG9ydHMgdG8gYmUgZW5hYmxlZC4KIyAgICAgICBQb3J0cyBtdXN0IGJlIHBvc3RmaXhlZCB3aXRoIC90Y3Agb3IgL3VkcApmaXJld2FsbGRfY29uZmlndXJlKCkgewogICAgbG9jYWwgLW4gcG9ydHM9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBzZXJ2aWNlPSgKICAgICAgICAiZmlyZXdhbGxkIgogICAgKQogICAgZW5hYmxlX3NlcnZpY2VzIHNlcnZpY2UKCiAgICBsb2cgIkVuYWJsaW5nIHBvcnRzICR7cG9ydHNbKl19IG9uIGRlZmF1bHQgZmlyZXdhbGxkIHpvbmUiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBwb3J0IGluICR7cG9ydHNbQF19OyBkbwogICAgICAgIGxvZyAiRW5hYmxpbmcgcG9ydCAkcG9ydCBub3ciCiAgICAgICAgZmlyZXdhbGwtY21kICItLWFkZC1wb3J0PSRwb3J0IiBcCiAgICAgICAgICAgICAgICAgICAgIC0tcGVybWFuZW50CiAgICBkb25lCgogICAgbG9nICJXcml0aW5nIHJ1bnRpbWUgY29uZmlnIHRvIHBlcm1hbmVudCBjb25maWciCiAgICBmaXJld2FsbC1jbWQgLS1ydW50aW1lLXRvLXBlcm1hbmVudAp9CgojU3RhcnQgb2YgcnBWTVNTLnNoCiMhL2Jpbi9iYXNoCgpzZXQgLW8gZXJyZXhpdCBcCiAgICAtbyBwaXBlZmFpbCBcCiAgICAtbyBub3Vuc2V0CgptYWluKCkgewogICAgIyB0cmFuc2FjdGlvbiBhdHRlbXB0IHJldHJ5IHRpbWUgaW4gc2Vjb25kcwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmkgcmV0cnlfd2FpdF90aW1lPTMwCiAgICBsb2NhbCAtcmkgcGtnX3JldHJ5X2NvdW50PTYwCgogICAgY3JlYXRlX3JlcXVpcmVkX2RpcnMKICAgIGNvbmZpZ3VyZV9zc2hkCiAgICBjb25maWd1cmVfcnBtX3JlcG9zIHJldHJ5X3dhaXRfdGltZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLWFyIGV4Y2x1ZGVfcGtncz0oCiAgICAgICAgIi14IFdBTGludXhBZ2VudCIKICAgICAgICAiLXggV0FMaW51eEFnZW50LXVkZXYiCiAgICApCgogICAgZG5mX3VwZGF0ZV9wa2dzIGV4Y2x1ZGVfcGtncyBcCiAgICAgICAgICAgICAgICAgICAgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAiJHBrZ19yZXRyeV9jb3VudCIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBpbnN0YWxsX3BrZ3M9KAogICAgICAgIGF6dXJlLWNsaQogICAgICAgIGNsYW1hdgogICAgICAgIGF6c2VjLWNsYW1hdgogICAgICAgIGF6dXJlLWNsaQogICAgICAgIGF6dXJlLW1kc2QKICAgICAgICBhenVyZS1zZWN1cml0eQogICAgICAgIHBvZG1hbgogICAgICAgIHBvZG1hbi1kb2NrZXIKICAgICAgICBvcGVuc3NsLXBlcmwKICAgICAgICAjIGhhY2sgLSB3ZSBhcmUgaW5zdGFsbGluZyBweXRob24zIG9uIGhvc3RzIGR1ZSB0byBhbiBpc3N1ZSB3aXRoIEF6dXJlIExpbnV4IEV4dGVuc2lvbnMgaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlL2F6dXJlLWxpbnV4LWV4dGVuc2lvbnMvcHVsbC8xNTA1CiAgICAgICAgcHl0aG9uMwogICAgICAgICMgcmVxdWlyZWQgZm9yIHBvZG1hbiBuZXR3b3JraW5nCiAgICAgICAgZmlyZXdhbGxkCiAgICAgICAgIyBSZXF1aXJlZCB0byBlbmFibGUgZmlwcwogICAgICAgIGdydWJieQogICAgICAgIGRyYWN1dC1maXBzCiAgICAgICAgZHJhY3V0LWZpcHMKICAgICkKCiAgICBkbmZfaW5zdGFsbF9wa2dzIGluc3RhbGxfcGtncyBcCiAgICAgICAgICAgICAgICAgICAgIHJldHJ5X3dhaXRfdGltZSBcCiAgICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgIGZpcHNfY29uZmlndXJlCgogICAgIyBUT0RPIHJlbW92ZSB0aGlzIG9uY2UgTWljcm9zb2Z0Q0JMTWFyaW5lcjpjYmwtbWFyaW5lcjpjYmwtbWFyaW5lci0yLWdlbjItZmlwcyBzdXBwb3J0cyBhdXRvbWF0aWMgdXBkYXRlcwogICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy1hdXRvbWF0aWMtdXBncmFkZSNzdXBwb3J0ZWQtb3MtaW1hZ2VzCiAgICBjb25maWd1cmVfZG5mX2Nyb25fam9iCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTE5CiAgICBjb25maWd1cmVfbG9ncm90YXRlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTUzIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZG1pbWFnZT0iJHtSUElNQUdFJSUvKn0vJHtNRE1JTUFHRSMqL30iCiAgICBsb2NhbCAtciBycGltYWdlPSIkUlBJTUFHRSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZmx1ZW50Yml0X2ltYWdlPSIkRkxVRU5UQklUSU1BR0UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9faW1hZ2VzPSgKICAgICAgICBbIm1kbSJdPSJtZG1pbWFnZSIKICAgICAgICBbInJwIl09InJwaW1hZ2UiCiAgICAgICAgWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2ltYWdlIgogICAgKQoKICAgIHB1bGxfY29udGFpbmVyX2ltYWdlcyBhcm9faW1hZ2VzCgogICAgbG9jYWwgLXIgYXJvX25ldHdvcms9ImFybyIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJBIG5ldHdvcmtzPSgKICAgICAgICBbIiRhcm9fbmV0d29yayJdPSIxOTIuMTY4LjI1NC4wLzI0IgogICAgKQogICAgY3JlYXRlX3BvZG1hbl9uZXR3b3JrcyBuZXR3b3JrcwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIGVuYWJsZV9wb3J0cz0oCiAgICAgICAgIyBSUCBmcm9udGVuZAogICAgICAgICI0NDMvdGNwIgogICAgICAgICMgUG9ydGFsIHdlYgogICAgICAgICI0NDQvdGNwIgogICAgICAgICMgUG9ydGFsIHNzaAogICAgICAgICIyMjIyL3RjcCIKICAgICAgICAjIEpJVCBzc2gKICAgICAgICAiMjIvdGNwIgogICAgKQoKICAgIGZpcmV3YWxsZF9jb25maWd1cmUgZW5hYmxlX3BvcnRzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBmbHVlbnRiaXRfY29uZl9maWxlPSJbSU5QVVRdCiAgICBOYW1lIHN5c3RlbWQKICAgIFRhZyBqb3VybmFsZAogICAgU3lzdGVtZF9GaWx0ZXIgX0NPTU09YXJvCiAgICBEQiAvdmFyL2xpYi9mbHVlbnQvam91cm5hbGRiCgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGpvdXJuYWxkCglSZW1vdmVfd2lsZGNhcmQgXwoJUmVtb3ZlIFRJTUVTVEFNUAoKW0ZJTFRFUl0KCU5hbWUgcmV3cml0ZV90YWcKCU1hdGNoIGpvdXJuYWxkCglSdWxlIFwkTE9HS0lORCBhc3luY3FvcyBhc3luY3FvcyB0cnVlCgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGFzeW5jcW9zCglSZW1vdmUgQ0xJRU5UX1BSSU5DSVBBTF9OQU1FCglSZW1vdmUgRklMRQoJUmVtb3ZlIENPTVBPTkVOVAoKW0ZJTFRFUl0KCU5hbWUgcmV3cml0ZV90YWcKCU1hdGNoIGpvdXJuYWxkCglSdWxlIFwkTE9HS0lORCBpZnhhdWRpdCBpZnhhdWRpdCBmYWxzZQoKW09VVFBVVF0KCU5hbWUgZm9yd2FyZAoJTWF0Y2ggKgoJUG9ydCAyOTIzMCIKCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZHNkX2NvbmZpZ192ZXJzaW9uPSIkUlBNRFNEQ09ORklHVkVSU0lPTiIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3JwX2NvbmZfZmlsZT0iQUNSX1JFU09VUkNFX0lEPSckQUNSUkVTT1VSQ0VJRCcKQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FPSckQURNSU5BUElDTElFTlRDRVJUQ09NTU9OTkFNRScKQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRT0nJEFSTUFQSUNMSUVOVENFUlRDT01NT05OQU1FJwpBWlVSRV9BUk1fQ0xJRU5UX0lEPSckQVJNQ0xJRU5USUQnCkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkFaVVJFX0ZQX1NFUlZJQ0VfUFJJTkNJUEFMX0lEPSckRlBTRVJWSUNFUFJJTkNJUEFMSUQnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPVJQCkNMVVNURVJfTURTRF9BQ0NPVU5UPSckQ0xVU1RFUk1EU0RBQ0NPVU5UJwpDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT049JyRDTFVTVEVSTURTRENPTkZJR1ZFUlNJT04nCkNMVVNURVJfTURTRF9OQU1FU1BBQ0U9JyRDTFVTVEVSTURTRE5BTUVTUEFDRScKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKRE9NQUlOX05BTUU9JyRMT0NBVElPTi4kQ0xVU1RFUlBBUkVOVERPTUFJTk5BTUUnCkdBVEVXQVlfRE9NQUlOUz0nJEdBVEVXQVlET01BSU5TJwpHQVRFV0FZX1JFU09VUkNFR1JPVVA9JyRHQVRFV0FZUkVTT1VSQ0VHUk9VUE5BTUUnCktFWVZBVUxUX1BSRUZJWD0nJEtFWVZBVUxUUFJFRklYJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT0nJHtyb2xlX3JwXl59JwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpSUF9GRUFUVVJFUz0nJFJQRkVBVFVSRVMnClJQSU1BR0U9JyRycGltYWdlJwpBUk9fSU5TVEFMTF9WSUFfSElWRT0nJENMVVNURVJTSU5TVEFMTFZJQUhJVkUnCkFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDPSckQ0xVU1RFUkRFRkFVTFRJTlNUQUxMRVJQVUxMU1BFQycKQVJPX0FET1BUX0JZX0hJVkU9JyRDTFVTVEVSU0FET1BUQllISVZFJwpPSURDX0FGRF9FTkRQT0lOVD0nJExPQ0FUSU9OLm9pYy4kUlBQQVJFTlRET01BSU5OQU1FJwpPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FPSckT0lEQ1NUT1JBR0VBQ0NPVU5UTkFNRScKIgoKICAgICMgdmFsdWVzIGFyZSByZWZlcmVuY2VzIHRvIHZhcmlhYmxlcywgdGhleSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBoZXJlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9fY29uZmlncz0oCiAgICAgICAgWyJycF9jb25maWciXT0iYXJvX3JwX2NvbmZfZmlsZSIKICAgICAgICBbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfY29uZl9maWxlIgogICAgICAgIFsibWRzZCJdPSJtZHNkX2NvbmZpZ192ZXJzaW9uIgogICAgICAgIFsibmV0d29yayJdPSJhcm9fbmV0d29yayIKICAgICkKCiAgICBjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMgcm9sZV9ycCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvX2ltYWdlcyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvX2NvbmZpZ3MKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBhcm9fc2VydmljZXM9KAogICAgICAgICJhcm8tbW9uaXRvciIKICAgICAgICAiYXJvLXBvcnRhbCIKICAgICAgICAiYXJvLXJwIgogICAgICAgICJhenNlY2QiCiAgICAgICAgIm1kc2QiCiAgICAgICAgIm1kbSIKICAgICAgICAiY2hyb255ZCIKICAgICAgICAiZmx1ZW50Yml0IgogICAgICAgICJkb3dubG9hZC1tZHNkLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICJkb3dubG9hZC1tZG0tY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgImZpcmV3YWxsZCIKICAgICkKCiAgICBlbmFibGVfc2VydmljZXMgYXJvX3NlcnZpY2VzCgogICAgcmVib290X3ZtCn0KCmV4cG9ydCBBWlVSRV9DTE9VRF9OQU1FPSIke0FaVVJFQ0xPVUROQU1FOj8iRmFpbGVkIHRvIGNhcnJ5IG92ZXIgdmFyaWFibGVzIn0iCgojIHV0aWwuc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBUaGlzIGlzIGJlY2F1c2UgY29tbW9uVk1TUy5zaCBpcyBjb25jYXRlbmF0ZWQgd2l0aCB0aGlzIHNjcmlwdAp1dGlsPSJ1dGlsLnNoIgppZiBbIC1mICIkdXRpbCIgXTsgdGhlbgogICAgIyBzaGVsbGNoZWNrIHNvdXJjZT11dGlsLnNoCiAgICBzb3VyY2UgIiR1dGlsIgpmaQoKbWFpbiAiJEAiCg==')))]" + "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','ADMINAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('adminApiClientCertCommonName')),''')\n','ARMAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armApiClientCertCommonName')),''')\n','ARMCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armClientId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','CLUSTERMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdmAccount')),''')\n','CLUSTERMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdAccount')),''')\n','CLUSTERMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdConfigVersion')),''')\n','CLUSTERMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdNamespace')),''')\n','CLUSTERPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterParentDomainName')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','FPCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpClientId')),''')\n','FPSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpServicePrincipalId')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYRESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayResourceGroupName')),''')\n','GATEWAYSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayServicePrincipalId')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','PORTALACCESSGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalAccessGroupIds')),''')\n','PORTALCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalClientId')),''')\n','PORTALELEVATEDGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalElevatedGroupIds')),''')\n','RPFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpFeatures')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdConfigVersion')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','RPPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpParentDomainName')),''')\n','OIDCSTORAGEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('oidcStorageAccountName')),''')\n','CLUSTERSINSTALLVIAHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersInstallViaHive')),''')\n','CLUSTERSADOPTBYHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersAdoptByHive')),''')\n','CLUSTERDEFAULTINSTALLERPULLSPEC=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterDefaultInstallerPullspec')),''')\n','ADMINAPICABUNDLE=''',parameters('adminApiCaBundle'),'''\n','ARMAPICABUNDLE=''',parameters('armApiCaBundle'),'''\n','MDMIMAGE=''/distroless/genevamdm:2.2024.626.1539-d1a6e7-20240715t0935@sha256:372fbc981bbfdf2b9a9d0ffdca2c51ed389b291a3bcff0401e9afb0c01605823''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('IyEvYmluL2Jhc2gKIyBJbnRlcm5hbCBGdW5jdGlvbnMgYW5kIENvbnN0YW50cwoKIyBlbXB0eV9zdHIgLSBjb25zdGFudDsgdXNlZCBieSBmdW5jdGlvbnMgZm9yIG9wdGlvbmFsIG5hbWVyZWYgc3RyaW5nIGFyZ3VlbWVudHMKIyBlbXB0eV9zdHI9IiIKIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CmRlY2xhcmUgLXIgZW1wdHlfc3RyPSIiCgojIHJvbGVfZ2F0ZXdheSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHRoaXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkgc2NyaXB0cyBzb3VyY2luZyB0aGlzIGZpbGUKIyByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9nYXRld2F5PSJnYXRld2F5IgojIHJvbGVfcnAgLSBjb25zdGFudDsgSXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggVk1TUyBpcyBiZWluZyBib290c3RyYXBwZWQKIyB0aGlzIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5IHNjcmlwdHMgc291cmNpbmcgdGhpcyBmaWxlCiMgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCiMgcm9sZV9kZXZwcm94eSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgpkZWNsYXJlIC1yIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgoKIyBsb2cgaXMgYSB3cmFwcGVyIGZvciBlY2hvIHRoYXQgaW5jbHVkZXMgdGhlIGZ1bmN0aW9uIG5hbWUKIyBBcmdzCiMgMSkgbXNnIC0gc3RyaW5nCiMgMikgc3RhY2tfbGV2ZWwgLSBpbnQ7IG9wdGlvbmFsLCBkZWZhdWx0cyB0byB0aGUgZnVuY3Rpb24gYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2FsbCBzdGFjawpsb2coKSB7CiAgICBsb2NhbCAtciBtc2c9IiR7MTotImxvZyBtZXNzYWdlIGlzIGVtcHR5In0iCiAgICBsb2NhbCAtciBzdGFja19sZXZlbD0iJHsyOi0xfSIKICAgIGVjaG8gIiR7RlVOQ05BTUVbJHtzdGFja19sZXZlbH1dfTogJHttc2d9Igp9CgojIGFib3J0IGlzIGEgd3JhcHBlciBmb3IgbG9nIHRoYXQgZXhpdHMgd2l0aCBhbiBlcnJvciBjb2RlCmFib3J0KCkgewogICAgbG9jYWwgLXJpIG9yaWdpbl9zdGFja2xldmVsPTIKICAgIGxvZyAiJHsxfSIgIiRvcmlnaW5fc3RhY2tsZXZlbCIKICAgIGxvZyAiRXhpdGluZyIKICAgIGV4aXQgMQp9CgojIHdyaXRlX2ZpbGUKIyBBcmdzCiMgMSkgZmlsZW5hbWUgLSBzdHJpbmcKIyAyKSBmaWxlX2NvbnRlbnRzIC0gc3RyaW5nCiMgMykgY2xvYmJlciAtIGJvb2xlYW47IG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gZmFsc2UKd3JpdGVfZmlsZSgpIHsKICAgIGxvY2FsIC1uIGZpbGVuYW1lPSIkMSIKICAgIGxvY2FsIC1uIGZpbGVfY29udGVudHM9IiQyIgogICAgbG9jYWwgLXIgY2xvYmJlcj0iJHszOi1mYWxzZX0iCgogICAgaWYgJGNsb2JiZXI7IHRoZW4KICAgICAgICBsb2cgIk92ZXJ3cml0aW5nIGZpbGUgJGZpbGVuYW1lIgogICAgICAgIGVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+ICIkZmlsZW5hbWUiCiAgICBlbHNlCiAgICAgICAgbG9nICJBcHBlbmRpbmcgdG8gJGZpbGVuYW1lIgogICAgICAgIGVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+PiAiJGZpbGVuYW1lIgogICAgZmkKfQoKIyByZXRyeSBBZGRpbmcgcmV0cnkgbG9naWMgdG8geXVtIGNvbW1hbmRzIGluIG9yZGVyIHRvIGF2b2lkIHN0YWxsaW5nIG91dCBvbiByZXNvdXJjZSBsb2NrcwojIGFyZ3M6CiMgMSkgY21kX3JldHJ5IC0gbmFtZXJlZiwgYXJyYXk7IENvbW1hbmQgYW5kIGFyZ3VlbWVudChzKSB0byByZXRyeQojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDMpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1tb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CnJldHJ5KCkgewogICAgbG9jYWwgLW4gY21kX3JldHJ5PSIkMSIKICAgIGxvY2FsIC1uIHdhaXRfdGltZT0iJDIiCiAgICBsb2NhbCAtcmkgcmV0cmllcz0iJHszOi01fSIKCiAgICAKICAgIGZvciBhdHRlbXB0IGluICQoc2VxIDEgJHJldHJpZXMpOyBkbwogICAgICAgIGxvZyAiYXR0ZW1wdCAjJHthdHRlbXB0fSAtICR7RlVOQ05BTUVbMl19IgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgICAgICR7Y21kX3JldHJ5W0BdfSAmCgogICAgICAgIHdhaXQgLWYgJCEgJiYgcmV0dXJuIDAKICAgICAgICBzbGVlcCAiJHdhaXRfdGltZSIKICAgIGRvbmUKCiAgICBhYm9ydCAiJHtjbWRfcmV0cnlbKl19IGZhaWxlZCBhZnRlciAjJHJldHJpZXMgYXR0ZW1wdHMiCn0KCiMgdmVyaWZ5X3JvbGUKIyBhcmdzOgojIDEpIHRlc3Rfcm9sZSAtIG5hbWVyZWY7IHJvbGUgYmVpbmcgdmVyaWZpZWQKIyAyKSBjZXJ0cyAtIGJvb2xlYW4sIG9wdGlvbmFsOyBkZWZhdWx0cyB0byBmYWxzZS4gU2V0IHRvIHRydWUgdG8gYWRkIGRldnByb3h5IHRvIGFsbG93ZWQgcm9sZXMKdmVyaWZ5X3JvbGUoKSB7CiAgICBsb2NhbCAtbiB0ZXN0X3JvbGU9IiQxIgogICAgbG9jYWwgLXIgY2VydHM9IiR7MjotZmFsc2V9IgoKICAgIGFsbG93ZWRfcm9sZXNfZ2xvYj0iKCRyb2xlX3JwfCRyb2xlX2dhdGV3YXkpIgogICAgaWYgJGNlcnRzOyB0aGVuCiAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgIikiIGFuZCBhcHBlbmQgYWRkaXRpb25hbCByb2xlCiAgICAgICAgYWxsb3dlZF9yb2xlc19nbG9iPSIke2FsbG93ZWRfcm9sZXNfZ2xvYiVcKSp9fCRyb2xlX2RldnByb3h5KSIKICAgIGZpCgogICAgaWYgW1sgIiR0ZXN0X3JvbGUiID1+ICRhbGxvd2VkX3JvbGVzX2dsb2IgXV07IHRoZW4KICAgICAgICBsb2cgIlZlcmlmaWVkIHJvbGUgXCIkdGVzdF9yb2xlXCIiCiAgICBlbHNlCiAgICAgICAgYWJvcnQgImZhaWxlZCB0byB2ZXJpZnkgcm9sZSwgcm9sZSBcIiR7dGVzdF9yb2xlfVwiIG5vdCBpbiBcIiR7YWxsb3dlZF9yb2xlc19nbG9ifVwiIgogICAgZmkKfQoKIyBnZXRfa2V5dmF1bHRfc3VmZml4CiMgYXJnczoKIyAxKSBybCAtIG5hbWVyZWYsIHN0cmluZzsgcm9sZSB0byBnZXQgc2hvcnQgcm9sZSBmb3IKIyAyKSBrdl9zdWZmaXggLSBuYW1lcmVmLCBzdHJpbmc7IHNob3J0IHJvbGUgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGlzIG5hbWVyZWYKIyAzKSBzZWNfcHJlZml4IC0gbmFtZXJlZiwgc3RyaW5nOyBrZXl2YXVsdCBjZXJ0aWZpY2F0ZSBwcmVmaXggd2lsbCBiZSBhc3NpZ25lZCB0byB0aGlzIG5hbWVyZWYKZ2V0X2tleXZhdWx0X3N1ZmZpeCgpIHsKICAgIGxvY2FsIC1uIHJsPSIkMSIKICAgIGxvY2FsIC1uIGt2X3N1ZmZpeD0iJDIiCiAgICBsb2NhbCAtbiBzZWNfcHJlZml4PSIkMyIKCiAgICBsb2NhbCAtciBrZXl2YXVsdF9zdWZmaXhfcnA9InN2YyIKICAgIGxvY2FsIC1yIGtleXZhdWx0X3ByZWZpeF9nYXRld2F5PSJnd3kiCgogICAgY2FzZSAiJHJsIiBpbgogICAgICAgICIkcm9sZV9nYXRld2F5IikKICAgICAgICAgICAga3Zfc3VmZml4PSIka2V5dmF1bHRfcHJlZml4X2dhdGV3YXkiCiAgICAgICAgICAgIHNlY19wcmVmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKICAgICAgICAgICAgOzsKICAgICAgICAiJHJvbGVfcnAiKQogICAgICAgICAgICBrdl9zdWZmaXg9IiRrZXl2YXVsdF9zdWZmaXhfcnAiCiAgICAgICAgICAgIHNlY19wcmVmaXg9IiRyb2xlX3JwIgogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIGFib3J0ICJ1bmtvd24gcm9sZSAkcmwiCiAgICAgICAgICAgIDs7CiAgICBlc2FjCn0KCiMgcmVib290X3ZtIHJlc3RvcmVzIGNhbGxzIHNodXRkb3duIC1yIGluIGEgc3Vic2hlbGwKIyBSZWJvb3RzIHNob3VsZCBzY2hlZHVsZWQgYWZ0ZXIgYWxsIFZNIGV4dGVuc2lvbnMgaGF2ZSBoYWQgdGltZSB0byBjb21wbGV0ZQojIFJlZmVyZW5jZTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvZXh0ZW5zaW9ucy9jdXN0b20tc2NyaXB0LWxpbnV4I3RpcHMKcmVib290X3ZtKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICAoc2h1dGRvd24gLXIgbm93ICYpCn0KIyEvYmluL2Jhc2gKIyBSZXBvc2l0b3J5IGFuZCBwYWNrYWdlIG1hbmFnZW1lbnQgcmVsYXRlZCBmdW5jdGlvbnMKCmNvbmZpZ3VyZV9yZXBvX21hcmluZXJfZXh0ZW5kZWQoKSB7CiAgICBsb2NhbCAtciBleHRlbmRlZF9yZXBvX2NvbmZpZz0iaHR0cHM6Ly9wYWNrYWdlcy5taWNyb3NvZnQuY29tL2NibC1tYXJpbmVyLzIuMC9wcm9kL2V4dGVuZGVkL3g4Nl82NC9jb25maWcucmVwbyIKICAgIGN1cmwgLXNTTCAiJGV4dGVuZGVkX3JlcG9fY29uZmlnIiAtbyAvZXRjL3l1bS5yZXBvcy5kL21hcmluZXItZXh0ZW5kZWQucmVwbwoKICAgIGxvY2FsIC1yIHJlcG9fbmFtZT0iY2JsLW1hcmluZXIyLjBwcm9kZXh0ZW5kZWR4ODZfNjQiCgogICAgbG9jYWwgLXJhIGNtZD0oCiAgICAgICAgZG5mCiAgICAgICAgdXBkYXRlCiAgICAgICAgLXkKICAgICAgICAtLWVuYWJsZXJlcG89IiRyZXBvX25hbWUiCiAgICApCgogICAgbG9nICJFbmFibGluZyByZXBvICRyZXBvX25hbWUiCiAgICByZXRyeSBjbWQgIiQxIiAiJHsyOi19Igp9CgojIGNvbmZpZ3VyZV9ycG1fcmVwb3MKIyBOZXcgcmVwb3NpdG9yaWVzIHNob3VsZCBiZSBhZGRlZCBpbiB0aGVpciBvd24gZnVuY3Rpb25zLCBhbmQgY2FsbGVkIGhlcmUKIyBhcmdzOgojIDEpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDIpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKY29uZmlndXJlX3JwbV9yZXBvcygpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCAiJDEiICIkezI6LTF9Igp9CgojIGRuZl9pbnN0YWxsX3BrZ3MKIyBhcmdzOgojIDEpIHBrZ3MgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXk7IFBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDMpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKZG5mX2luc3RhbGxfcGtncygpIHsKICAgIGxvY2FsIC1uIHBrZ3M9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIC15CiAgICAgICAgaW5zdGFsbAogICAgKQogICAgCiAgICAjIFJlZmVyZW5jZTogaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIyMDYKICAgICMgYXBwZW5kIHBrZ3MgYXJyYXkgdG8gY21kCiAgICBtYXBmaWxlIC1PICQoKCAkeyNjbWRbQF19ICsgMSApKSAtZCAnICcgY21kIDw8PCAiJHtwa2dzW0BdfSIKICAgIGxvY2FsIC1yIGNtZAoKICAgIGxvZyAiQXR0ZW1wdGluZyB0byBpbnN0YWxsIHBhY2thZ2VzOiAke3BrZ3NbKl19IgogICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQoKCiMgZG5mX3VwZGF0ZV9wa2dzCiMgYXJnczoKIyAxKSBleGNsdWRlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheSwgb3B0aW9uYWw7IFBhY2thZ2VzIHRvIGV4Y2x1ZGUgZnJvbSB1cGRhdGluZwojICAgICAgIEVhY2ggaW5kZXggbXVzdCBiZSBwcmVmaXhlZCB3aXRoIC14IAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojIDMpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbDsgQW1tb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmRuZl91cGRhdGVfcGtncygpIHsKICAgIGxvY2FsIC1uIGV4Y2x1ZGVzPSIkezE6LWVtcHR5X3N0cn0iCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGxvY2FsIC1hIGNtZD0oCiAgICAgICAgZG5mCiAgICAgICAgLXkKICAgICAgICAjIFJlcGxhY2VkIHdpdGggZXhjbHVkZXMKICAgICAgICAiIgogICAgICAgIHVwZGF0ZQogICAgICAgIC0tYWxsb3dlcmFzaW5nCiAgICApCgogICAgaWYgWyAtbiAiJHtleGNsdWRlc30iIF07IHRoZW4KICAgICAgICAjIFJlZmVyZW5jZSBodHRwczovL3d3dy5zaGVsbGNoZWNrLm5ldC93aWtpL1NDMjIwNgogICAgICAgIG1hcGZpbGUgLU8gMiBjbWQgPDw8ICIke2V4Y2x1ZGVzW0BdfSIKICAgIGVsc2UKICAgICAgICAjIFJlbW92ZSBlbXB0eSBzdHJpbmcgaWYgd2UgYXJlbid0IHJlcGxhY2luZyB0aGVtLCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciwgYnV0IHdoeSBub3QgYmUgc2FmZQogICAgICAgIHVuc2V0ICJjbWRbMl0iCiAgICBmaQogICAgbG9jYWwgLXIgY21kCgogICAgbG9nICJVcGRhdGluZyBhbGwgcGFja2FnZXMgZXhjbHVkaW5nIFwiJHtleGNsdWRlc1sqXTotfVwiIgogICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQoKIyBjb25maWd1cmVfZG5mX2Nyb25fam9iCiMgY3JlYXRlIGNyb24gam9iIHRvIGF1dG8gdXBkYXRlIHJwbSBwYWNrYWdlcwpjb25maWd1cmVfZG5mX2Nyb25fam9iKCkgewogICAgbG9nICJzdGFydGluZyIKICAgIGxvY2FsIC1yIGNyb25fd2Vla2x5X2RuZl91cGRhdGVfZmlsZW5hbWU9Jy9ldGMvY3Jvbi53ZWVrbHkvZG5mdXBkYXRlJwogICAgbG9jYWwgLXIgY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlPSIjIS9iaW4vYmFzaApkbmYgdXBkYXRlIC15IgoKICAgIHdyaXRlX2ZpbGUgY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlbmFtZSBjcm9uX3dlZWtseV9kbmZfdXBkYXRlX2ZpbGUgdHJ1ZQogICAgY2htb2QgdSt4ICIkY3Jvbl93ZWVrbHlfZG5mX3VwZGF0ZV9maWxlbmFtZSIKfQoKIyBycG1faW1wb3J0X2tleXMKIyBhcmdzOgojIDEpIGtleXMgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXk7IHJwbSBrZXlzIHRvIGJlIGltcG9ydGVkCiMgMikgd2FpdF90aW1lIC0gbmFtZXJlZiwgaW50ZWdlcjsgVGltZSB0byB3YWl0IGJlZm9yZSByZXRyeWluZyBjb21tYW5kCnJwbV9pbXBvcnRfa2V5cygpIHsKICAgIGxvY2FsIC1uIGtleXM9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBrZXkgaW4gJHtrZXlzW0BdfTsgZG8KICAgICAgICBpZiBbICR7I2tleXNbQF19IC1lcSAwIF07IHRoZW4KICAgICAgICAgICAgYnJlYWsKICAgICAgICBmaQoKICAgICAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgICAgICBycG0KICAgICAgICAgICAgLS1pbXBvcnQKICAgICAgICAgICAgLXYKICAgICAgICAgICAgIiRrZXkiCiAgICAgICAgKQoKICAgICAgICBsb2cgIkltcG9ydGluZyBycG0gcmVwb3NpdG9yeSBrZXkgJGtleSIKICAgICAgICByZXRyeSBjbWQgIiQyIiAiJHszOi19IiAmJiB1bnNldCBrZXkKICAgIGRvbmUKfQoKIyB1dGlsLWNvbW1vbi5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1jb21tb24uc2gKICAgIHNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQojIS9iaW4vYmFzaAojIEFSTyBzZXJ2aWNlIHNldHVwIGZ1bmN0aW9ucwoKIyBlbmFibGVfc2VydmljZXMgZW5hYmxlcyB0aGUgc3lzdGVtZCBzZXJ2aWNlcyB0aGF0IGFyZSBwYXNzZWQgaW4KIyBhcmdzOgojIDEpIHNlcnZpY2VzIC0gYXJyYXk7IHNlcnZpY2VzIHRvIGJlIGVuYWJsZWQKZW5hYmxlX3NlcnZpY2VzKCkgewogICAgbG9jYWwgLW4gc3Zjcz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCgogICAgbG9nICJlbmFibGluZyBzZXJ2aWNlcyAke3N2Y3NbKl19IgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Igc3ZjIGluICR7c3Zjc1tAXX07IGRvCiAgICAgICAgbG9nICJFbmFibGluZyBhbmQgc3RhcnRpbmcgJHN2YyBub3ciCiAgICAgICAgc3lzdGVtY3RsIGVuYWJsZSBcCiAgICAgICAgICAgICAgICAgIC0tbm93IFwKICAgICAgICAgICAgICAgICAgIiRzdmMiCiAgICBkb25lCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBjb250YWluZXIgaW1hZ2UKIyAyKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBWTVNTIHJvbGUKIyAzKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBnYXRld2F5IGVudmlyb25tZW50IGZpbGUKIyA0KSBuZXR3b3JrIC0gbmFtZXJlZiwgc3RyaW5nOyBwb2RtYW4gbmV0d29yayBuYW1lIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5KCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gcm9sZT0iJDIiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgogICAgbG9jYWwgLW4gbmV0d29yaz0iJDQiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tZ2F0ZXdheSBzZXJ2aWNlIgoKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1nYXRld2F5JwoKICAgIHdyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tZ2F0ZXdheS5zZXJ2aWNlJwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0ke2Fyb19nYXRld2F5X2NvbmZfZmlsZW5hbWV9CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9GRUFUVVJFUyBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JG5ldHdvcmsgXAogIC1wIDgwOjgwODAgXAogIC1wIDgwODE6ODA4MSBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogICR7cm9sZSwsfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgICIKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWUgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fcnAKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBWTVNTIHJvbGUKIyAzKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgNCkgbmV0d29yayAtIG5hbWVyZWYsIHN0cmluZzsgcG9kbWFuIG5ldHdvcmsgbmFtZSB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fcnAoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiByb2xlPSIkMiIKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkNCIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1ycCBzZXJ2aWNlIgoKICAgIGxvY2FsIC1yIGFyb19ycF9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcnAnCgogICAgd3JpdGVfZmlsZSBhcm9fcnBfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXJwLnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPSR7YXJvX3JwX2NvbmZfZmlsZW5hbWV9CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFSTV9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFaVVJFX0FSTV9DTElFTlRfSUQgXAogIC1lIEFaVVJFX0ZQX0NMSUVOVF9JRCBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBDTFVTVEVSX01EU0RfTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtcCA0NDM6ODQ0MyBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogICR7cm9sZSwsfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBhcm9fcnBfc2VydmljZV9maWxlbmFtZSBhcm9fcnBfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvcgojIGFyZ3M6CiMgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IFJQIGNvbnRhaW5lciBpbWFnZQojIDIpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1tb25pdG9yIHNlcnZpY2UiCgogICAgIyBET01BSU5fTkFNRSwgQ0xVU1RFUl9NRFNEX0FDQ09VTlQsIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiwgR0FURVdBWV9ET01BSU5TLCBHQVRFV0FZX1JFU09VUkNFR1JPVVAsIE1EU0RfRU5WSVJPTk1FTlQgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRQogICAgIyBhcmUgbm90IHVzZWQsIGJ1dCBjYW4ndCBlYXNpbHkgYmUgcmVmYWN0b3JlZCBvdXQuIFNob3VsZCBiZSByZXZpc2l0ZWQgaW4gdGhlIGZ1dHVyZS4KICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tbW9uaXRvcicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkRPTUFJTl9OQU1FPSckTE9DQVRJT04uJENMVVNURVJQQVJFTlRET01BSU5OQU1FJwpDTFVTVEVSX01EU0RfQUNDT1VOVD0nJENMVVNURVJNRFNEQUNDT1VOVCcKQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OPSckQ0xVU1RFUk1EU0RDT05GSUdWRVJTSU9OJwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9SRVNPVVJDRUdST1VQPSckR0FURVdBWVJFU09VUkNFR1JPVVBOQU1FJwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpDTFVTVEVSX01EU0RfTkFNRVNQQUNFPSckQ0xVU1RFUk1EU0ROQU1FU1BBQ0UnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPUJCTQpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpLRVlWQVVMVF9QUkVGSVg9JyRLRVlWQVVMVFBSRUZJWCcKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9QkJNClJQSU1BR0U9JyRpbWFnZSciCgogICAgd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbW9uaXRvci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1tb25pdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSRuZXR3b3JrIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1tIDIuNWcgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogIG1vbml0b3IKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbAojIGFyZ3M6CiMgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IFJQIGNvbnRhaW5lciBpbWFnZQojIDIpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIG5ldHdvcms9IiQyIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvIHBvcnRhbCBzZXJ2aWNlIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTPSckUE9SVEFMQUNDRVNTR1JPVVBJRFMnCkFaVVJFX1BPUlRBTF9DTElFTlRfSUQ9JyRQT1JUQUxDTElFTlRJRCcKQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUz0nJFBPUlRBTEVMRVZBVEVER1JPVVBJRFMnCkRBVEFCQVNFX0FDQ09VTlRfTkFNRT0nJERBVEFCQVNFQUNDT1VOVE5BTUUnCktFWVZBVUxUX1BSRUZJWD0nJEtFWVZBVUxUUFJFRklYJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT1Qb3J0YWwKUE9SVEFMX0hPU1ROQU1FPSckTE9DQVRJT04uYWRtaW4uJFJQUEFSRU5URE9NQUlOTkFNRScKUlBJTUFHRT0nJGltYWdlJyIKCiAgICB3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1wb3J0YWwuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGU9IltVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JG5ldHdvcmsgXAogIC1lIEFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTIFwKICAtZSBBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIFBPUlRBTF9IT1NUTkFNRSBcCiAgLW0gMmcgXAogIC1wIDQ0NDo4NDQ0IFwKICAtcCAyMjIyOjIyMjIgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogIHBvcnRhbApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfbWRzZAojIGFyZ3M6CiMgMSkgbW9uaXRvcmluZ19yb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBjYW4gYmUgImdhdGV3YXkiIG9yICJycCIKIyAyKSBtb25pdG9yX2NvbmZpZ192ZXJzaW9uIC0gbmFtZXJlZiwgc3RyaW5nOyBtZHNkIGNvbmZpZyB2ZXJzaW9uCmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QoKSB7CiAgICBsb2NhbCAtbiByb2xlPSIkMSIKICAgIGxvY2FsIC1uIG1vbml0b3JfY29uZmlnX3ZlcnNpb249IiQyIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiY29uZmlndXJpbmcgbWRzZCBzZXJ2aWNlIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICBsb2NhbCAtciBtZHNkX3NlcnZpY2VfZGlyPSIvZXRjL3N5c3RlbWQvc3lzdGVtL21kc2Quc2VydmljZS5kIgogICAgbWtkaXIgLXAgIiRtZHNkX3NlcnZpY2VfZGlyIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lPSIkbWRzZF9zZXJ2aWNlX2Rpci9vdmVycmlkZS5jb25mIgogICAgbG9jYWwgLXIgbWRzZF9jZXJ0aWZpY2F0ZV9zYW49IiQob3BlbnNzbCB4NTA5IC1pbiAvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbSAtbm9vdXQgLXN1YmplY3QgfCBzZWQgLWUgJ3MvLipDTiA9IC8vJykiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlbmFtZT0iL2V0Yy9kZWZhdWx0L21kc2QiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlPSJNRFNEX1JPTEVfUFJFRklYPS92YXIvcnVuL21kc2QvZGVmYXVsdApNRFNEX09QVElPTlM9XCItQSAtZCAtciBcJE1EU0RfUk9MRV9QUkVGSVhcIgoKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfQUNDT1VOVD0nJFJQTURTREFDQ09VTlQnCmV4cG9ydCBNT05JVE9SSU5HX0dDU19SRUdJT049JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSURfVFlQRT1BdXRoS2V5VmF1bHQKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSUQ9JyRtZHNkX2NlcnRpZmljYXRlX3NhbicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX05BTUVTUEFDRT0nJFJQTURTRE5BTUVTUEFDRScKZXhwb3J0IE1PTklUT1JJTkdfQ09ORklHX1ZFUlNJT049JyRtb25pdG9yX2NvbmZpZ192ZXJzaW9uJwpleHBvcnQgTU9OSVRPUklOR19VU0VfR0VORVZBX0NPTkZJR19TRVJWSUNFPXRydWUKCmV4cG9ydCBNT05JVE9SSU5HX1RFTkFOVD0nJExPQ0FUSU9OJwpleHBvcnQgTU9OSVRPUklOR19ST0xFPSckcm9sZScKZXhwb3J0IE1PTklUT1JJTkdfUk9MRV9JTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIKCmV4cG9ydCBNRFNEX01TR1BBQ0tfU09SVF9DT0xVTU5TPVwiMVwiIgoKICAgIHdyaXRlX2ZpbGUgZGVmYXVsdF9tZHNkX2ZpbGVuYW1lIGRlZmF1bHRfbWRzZF9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQKIyBhcmdzOgojIDEpIGNvbmZfZmlsZSAtIHN0cmluZzsgZmx1ZW5iaXQgY29uZmlndXJhdGlvbiBmaWxlCiMgMikgaW1hZ2UgLSBzdHJpbmc7IGZsdWVudGJpdCBjb250YWluZXIgaW1hZ2UgdG8gcnVuCiMgMykgbmV0d29yayAtIG5hbWVyZWYsIHN0cmluZzsgcG9kbWFuIG5ldHdvcmsgbmFtZSB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQoKSB7CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZT0iJDIiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGZsdWVudGJpdCBzZXJ2aWNlIgoKICAgIG1rZGlyIC1wIC9ldGMvZmx1ZW50Yml0LwogICAgbWtkaXIgLXAgL3Zhci9saWIvZmx1ZW50CgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBjb25mX2ZpbGVuYW1lPScvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZicKICAgIHdyaXRlX2ZpbGUgY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19maWxlPSJGTFVFTlRCSVRJTUFHRT0kaW1hZ2UiCgogICAgd3JpdGVfZmlsZSBzeXNjb25maWdfZmlsZW5hbWUgc3lzY29uZmlnX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mbHVlbnRiaXQuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc2VydmljZV9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MAoKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2ZsdWVudGJpdApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1zZWN1cml0eS1vcHQgbGFiZWw9ZGlzYWJsZSBcCiAgLS1lbnRyeXBvaW50IC9vcHQvdGQtYWdlbnQtYml0L2Jpbi90ZC1hZ2VudC1iaXQgXAogIC0tbmV0PWhvc3QgXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtdiAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZjovZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZiBcCiAgLXYgL3Zhci9saWIvZmx1ZW50Oi92YXIvbGliL2ZsdWVudDp6IFwKICAtdiAvdmFyL2xvZy9qb3VybmFsOi92YXIvbG9nL2pvdXJuYWw6cm8gXAogIC12IC9ldGMvbWFjaGluZS1pZDovZXRjL21hY2hpbmUtaWQ6cm8gXAogICRpbWFnZSBcCiAgLWMgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYKCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9NQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgc2VydmljZV9maWxlbmFtZSBzZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QKIyBhcmdzOgojIDEpIHJvbGUgLSBzdHJpbmc7IGNhbiBiZSAiZ2F0ZXdheSIgb3IgInJwIgpjb25maWd1cmVfdGltZXJzX21kbV9tZHNkKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICBsb2NhbCBrZXl2YXVsdF9zdWZmaXggc2VjcmV0X3ByZWZpeAogICAgZ2V0X2tleXZhdWx0X3N1ZmZpeCByb2xlIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CgogICAgZm9yIHZhciBpbiAibWRzZCIgIm1kbSI7IGRvCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb3dubG9hZC0kdmFyLWNyZWRlbnRpYWxzLnNlcnZpY2UiCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCAkdmFyIgoKICAgICAgICB3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlIHRydWUKCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy50aW1lciIKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltUaW1lcl0KT25Cb290U2VjPTBtaW4KT25DYWxlbmRhcj0wLzEyOjAwOjAwCkFjY3VyYWN5U2VjPTVzCgpbSW5zdGFsbF0KV2FudGVkQnk9dGltZXJzLnRhcmdldCIKCiAgICAgICAgd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlIHRydWUKICAgIGRvbmUKCiAgICBsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWU9Ii91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZT0iIyEvYmluL2Jhc2gKc2V0IC1ldQoKQ09NUE9ORU5UPVwkMQplY2hvIFwiRG93bmxvYWQgXCRDT01QT05FTlQgY3JlZGVudGlhbHNcIgoKVEVNUF9ESVI9XCJcJChta3RlbXAgLWQpXCIKZXhwb3J0IEFaVVJFX0NPTkZJR19ESVI9XCJcJChta3RlbXAgLWQpXCIKCmVjaG8gXCJMb2dnaW5nIGludG8gQXp1cmUuLi5cIgpSRVRSSUVTPTMKd2hpbGUgW1sgXCRSRVRSSUVTIC1ndCAwIF1dOyBkbwogICAgaWYgYXogbG9naW4gLWkgLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zCiAgICB0aGVuCiAgICAgICAgZWNobyBcImF6IGxvZ2luIHN1Y2Nlc3NmdWxcIgogICAgICAgIGJyZWFrCiAgICBlbHNlCiAgICAgICAgZWNobyBcImF6IGxvZ2luIGZhaWxlZC4gUmV0cnlpbmcuLi5cIgogICAgICAgIGxldCBSRVRSSUVTLT0xCiAgICAgICAgc2xlZXAgNQogICAgZmkKZG9uZQoKdHJhcCBcImNsZWFudXBcIiBFWElUCgpjbGVhbnVwKCkgewogIGF6IGxvZ291dAogIFtbIFwkVEVNUF9ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRURU1QX0RJUgogIFtbIFwkQVpVUkVfQ09ORklHX0RJUiA9fiAvdG1wLy4rIF1dICYmIHJtIC1yZiBcJEFaVVJFX0NPTkZJR19ESVIKfQoKaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kbVwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvZXRjL21kbS5wZW1cIgplbGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICBDVVJSRU5UX0NFUlRfRklMRT1cIi92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlL21kc2QucGVtXCIKZWxzZQogIGVjaG8gSW52YWxpZCB1c2FnZSAmJiBleGl0IDEKZmkKClNFQ1JFVF9OQU1FPVwiJHNlY3JldF9wcmVmaXgtXCR7Q09NUE9ORU5UfVwiCk5FV19DRVJUX0ZJTEU9XCJcJFRFTVBfRElSL1wkQ09NUE9ORU5ULnBlbVwiCmZvciBhdHRlbXB0IGluIHsxLi41fTsgZG8KICBheiBrZXl2YXVsdCBcCiAgICBzZWNyZXQgXAogICAgZG93bmxvYWQgXAogICAgLS1maWxlIFwiXCRORVdfQ0VSVF9GSUxFXCIgXAogICAgLS1pZCBcImh0dHBzOi8vJEtFWVZBVUxUUFJFRklYLSRrZXl2YXVsdF9zdWZmaXguJEtFWVZBVUxURE5TU1VGRklYL3NlY3JldHMvXCRTRUNSRVRfTkFNRVwiIFwKICAgICYmIGJyZWFrCiAgaWYgW1sgXCRhdHRlbXB0IC1sdCA1IF1dOyB0aGVuIHNsZWVwIDEwOyBlbHNlIGV4aXQgMTsgZmkKZG9uZQoKaWYgWyAtZiBcJE5FV19DRVJUX0ZJTEUgXTsgdGhlbgogIGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICAgIGNob3duIHN5c2xvZzpzeXNsb2cgXCRORVdfQ0VSVF9GSUxFCiAgZWxzZQogICAgc2VkIC1pIC1uZSAnMSwvRU5EIENFUlRJRklDQVRFLyBwJyBcJE5FV19DRVJUX0ZJTEUKICBmaQoKICBuZXdfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJE5FV19DRVJUX0ZJTEVcIiAtbm9vdXQgLXNlcmlhbCB8IGF3ayAtRj0gJ3twcmludCBcJDJ9JylcIgogIGN1cnJlbnRfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJENVUlJFTlRfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBpZiBbWyAhIC16IFwkbmV3X2NlcnRfc24gXV0gJiYgW1sgXCRuZXdfY2VydF9zbiAhPSBcIlwkY3VycmVudF9jZXJ0X3NuXCIgXV07IHRoZW4KICAgIGVjaG8gdXBkYXRpbmcgY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UCiAgICBjaG1vZCAwNjAwIFwkTkVXX0NFUlRfRklMRQogICAgbXYgXCRORVdfQ0VSVF9GSUxFIFwkQ1VSUkVOVF9DRVJUX0ZJTEUKICBmaQplbHNlCiAgZWNobyBGYWlsZWQgdG8gcmVmcmVzaCBjZXJ0aWZpY2F0ZSBmb3IgXCRDT01QT05FTlQgJiYgZXhpdCAxCmZpIgoKICAgIHdyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlIHRydWUKCiAgICBjaG1vZCB1K3ggL3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2gKCiAgICAkZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kc2QgJgogICAgd2FpdCAiJCEiCgoKICAgICRkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgbWRtICYKICAgIHdhaXQgIiQhIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnNlcnZpY2UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1XYXRjaCBmb3IgY2hhbmdlcyBpbiBtZG0ucGVtIGFuZCByZXN0YXJ0cyB0aGUgbWRtIHNlcnZpY2UKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3IvYmluL3N5c3RlbWN0bCByZXN0YXJ0IG1kbS5zZXJ2aWNlCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQiCgogICAgd3JpdGVfZmlsZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGVuYW1lPScvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbS93YXRjaC1tZG0tY3JlZGVudGlhbHMucGF0aCcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZT0nW1BhdGhdClBhdGhNb2RpZmllZD0vZXRjL21kbS5wZW0KCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGUgdHJ1ZQoKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkcz0nd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCiAgICBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93ICIkd2F0Y2hfbWRtX2NyZWRzIiB8fCBhYm9ydCAiZmFpbGVkIHRvIGVuYWJsZSBhbmQgc3RhcnQgJHdhdGNoX21kbV9jcmVkcyIKfQoKIyBjb25maWd1cmVfc2VydmljZV9tZG0KIyBhcmdzOgojIDEpIHJvbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGNhbiBiZSAiZ2F0ZXdheSIgb3IgInJwIgojIDIpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBtZG0gY29udGFpbmVyIGltYWdlIHRvIHJ1bgojIDMpIG5ldHdvcmsgLSBuYW1lcmVmLCBzdHJpbmc7IHBvZG1hbiBuZXR3b3JrIG5hbWUgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfbWRtKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZT0iJDIiCiAgICBsb2NhbCAtbiBuZXR3b3JrPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIG1kbSBzZXJ2aWNlIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWU9Ii9ldGMvc3lzY29uZmlnL21kbSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX21kbV9maWxlPSJNRE1GUk9OVEVORFVSTD0nJE1ETUZST05URU5EVVJMJwpNRE1JTUFHRT0nJGltYWdlJwpNRE1TT1VSQ0VFTlZJUk9OTUVOVD0nJExPQ0FUSU9OJwpNRE1TT1VSQ0VST0xFPSckcm9sZScKTURNU09VUkNFUk9MRUlOU1RBTkNFPVwiJChob3N0bmFtZSlcIiIKCiAgICB3cml0ZV9maWxlIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWUgc3lzY29uZmlnX21kbV9maWxlIHRydWUKCiAgICBta2RpciAtcCAvdmFyL2V0dwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZG1fc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZG0uc2VydmljZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvbWRtCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWVudHJ5cG9pbnQgL3Vzci9zYmluL01ldHJpY3NFeHRlbnNpb24gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JG5ldHdvcmsgXAogIC1tIDJnIFwKICAtdiAvZXRjL21kbS5wZW06L2V0Yy9tZG0ucGVtIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAkaW1hZ2UgXAogIC1DZXJ0RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Gcm9udEVuZFVybCAkTURNRlJPTlRFTkRVUkwgXAogIC1Mb2dnZXIgQ29uc29sZSBcCiAgLUxvZ0xldmVsIFdhcm5pbmcgXAogIC1Qcml2YXRlS2V5RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Tb3VyY2VFbnZpcm9ubWVudCAkTE9DQVRJT04gXAogIC1Tb3VyY2VSb2xlICRyb2xlIFwKICAtU291cmNlUm9sZUluc3RhbmNlICRIT1NUTkFNRQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lIG1kbV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlCiMgYXJnczoKIyAxKSByIC0gbmFtZXJlZiwgc3RyaW5nOyByb2xlIG9mIFZNU1MKIyAyKSBpbWFnZXMgLSBuYW1lcmVmLCBhc3NvY2lhdGl2ZSBhcnJheTsgQVJPIGNvbnRhaW5lciBpbWFnZXMKIyAzKSBjb25maWdzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHZlcnNpb25zLiBUaGUgdmFsdWVzIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byB2YXJpYWJsZXMsIG5vdCBkZXJlZmVyZW5jZWQuCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIHZhbHVlIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBuYW1lcmVmIHZhcmlhYmxlcyBieSBoZWxwZXIgZnVuY3Rpb25zLgpjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMoKSB7CiAgICBsb2NhbCAtbiByPSIkMSIKICAgIGxvY2FsIC1uIGltYWdlcz0iJDIiCiAgICBsb2NhbCAtbiBjb25maWdzPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICB2ZXJpZnlfcm9sZSAiJDEiCgogICAgaWYgWyAiJHIiID09ICIkcm9sZV9nYXRld2F5IiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJnYXRld2F5X2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgICAgICBjb25maWd1cmVfY2VydHNfZ2F0ZXdheQogICAgZWxpZiBbICIkciIgPT0gIiRyb2xlX3JwIiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwICIke2ltYWdlc1sicnAiXX0iICIkMSIgIiR7Y29uZmlnc1sicnBfY29uZmlnIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19tb25pdG9yICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJuZXR3b3JrIl19IgogICAgICAgIGNvbmZpZ3VyZV9jZXJ0c19ycAogICAgZmkKCiAgICBjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQgIiR7Y29uZmlnc1siZmx1ZW50Yml0Il19IiAiJHtpbWFnZXNbImZsdWVudGJpdCJdfSIgIiR7Y29uZmlnc1sibmV0d29yayJdfSIKICAgIGNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QgIiQxIgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRtICIkMSIgIiR7aW1hZ2VzWyJtZG0iXX0iICIke2NvbmZpZ3NbIm5ldHdvcmsiXX0iCiAgICBjb25maWd1cmVfc2VydmljZV9tZHNkICIkMSIgIiR7Y29uZmlnc1sibWRzZCJdfSIKICAgIHJ1bl9henNlY2RfY29uZmlnX3NjYW4KfQoKIyB1dGlsLWNvbW1vbi5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1jb21tb24uc2gKICAgIHNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQoKIyB1dGlsLXN5c3RlbS5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9zeXN0ZW09InV0aWwtc3lzdGVtLnNoIgppZiBbIC1mICIkdXRpbF9zeXN0ZW0iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1zeXN0ZW0uc2gKICAgIHNvdXJjZSAiJHV0aWxfc3lzdGVtIgpmaQojIS9iaW4vYmFzaAojIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBzb3VyY2VkIGJ5IGJvb3RzdHJhcHBpbmcgc2NyaXB0cyBmb3IgY29tbW9ubHkgdXNlZCBmdW5jdGlvbnMKCiMgZ2V0X2Jvb3RfZGV2X3V1aWQKIyBHZXQgdGhlIGJvb3QgZGV2aWNlcyB1dWlkCiMgYXJnczoKIyAxKSBib290X2Rldl91dWlkIC0gbmFtZXJlZiwgc3RyaW5nOyBFbXB0eSB2YXJpYWJsZSBmb3IgYm9vdCBkZXZpY2UgdXVpZCBhc3NpZ25tZW50CiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKZ2V0X2Jvb3RfZGV2X3V1aWQoKSB7CiAgICBsb2NhbCAtbiBib290X2Rldl91dWlkPSIkMSIKICAgICMgU2V0IGJvb3RfdXVpZCB2YXJpYWJsZSBmb3IgdGhlIGJvb3QgcGFydGl0aW9uIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByb290CiAgICBib290X2Rldj0iJChkZiAvYm9vdC8gfCB0YWlsIC0xIHwgY3V0IC1kJyAnIC1mMSkiCiAgICByb290X2Rldj0iJChkZiAvIHwgdGFpbCAtMSB8IGN1dCAtZCcgJyAtZjEpIgoKICAgIGJvb3RfZGV2X3V1aWQ9IiRyb290X2RldiIKICAgIGlmIFsgIiRib290X2RldiIgIT0gIiRyb290X2RldiIgXTsgdGhlbgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGJvb3RfZGV2X3V1aWQ9ImJvb3Q9VVVJRD0kKGJsa2lkICIkYm9vdF9kZXYiIC1zIFVVSUQgLW8gdmFsdWUpIgogICAgZmkKfQoKIyBmaXBzX3ZlcmlmeQojIFZlcmlmeSB0aGF0IGZpcHMgbW9kZSBpcyBlbmFibGVkCiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKZmlwc192ZXJpZnkoKSB7CiAgICBmaXBzX2VuYWJsZWRfcHJvYz0iJChjYXQgL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQpIgogICAgZmlwc19lbmFibGVkX3N5c2N0bD0iJChzeXNjdGwgLW4gY3J5cHRvLmZpcHNfZW5hYmxlZCkiCiAgICBpZiBbICIkZmlwc19lbmFibGVkX3Byb2MiIC1uZSAxIF0gfHwgWyAiJGZpcHNfZW5hYmxlZF9zeXNjdGwiIC1uZSAxIF07IHRoZW4KICAgICAgICBhYm9ydCAiRklQUyBtb2RlIGlzIGRpc2FibGVkIgogICAgZmkKCiAgICBsb2cgIkZJUFMgbW9kZSBpcyBlbmFibGVkIgp9CgojIGZpcHNfY29uZmlndXJlCiMgQ29uZmlndXJlcyBWTSB0byBydW4gd2l0aCBmaXBzIG1vZGUgZW5hYmxlZAojIFRha2VuIGFuZCByZWZhY3RvcmVkIGZyb20gaHR0cHM6Ly9lbmcubXMvZG9jcy9wcm9kdWN0cy9henVyZS1saW51eC9mZWF0dXJlcy9zZWN1cml0eS9maXBzCiMgVE9ETyByZW1vdmUgdGhpcyBvbmNlIHNrdSBjYmwtbWFyaW5lci0yLWdlbjItZmlwcyBpcyBzdXBwb3J0ZWQgYnkgYXV0b21hdGljIE9TIHVwZGF0ZXMKIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy1hdXRvbWF0aWMtdXBncmFkZSNzdXBwb3J0ZWQtb3MtaW1hZ2VzCmZpcHNfY29uZmlndXJlKCkgewogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCBib290X3V1aWQKICAgIGdldF9ib290X2Rldl91dWlkIGJvb3RfdXVpZAoKICAgIGxvY2FsIGdydWIyX2VudgogICAgaWYgZ3J1YjJfZW52PSIkKGdydWIyLWVkaXRlbnYgLSBsaXN0IHwgZ3JlcCBrZXJuZWxvcHRzKSI7IHRoZW4KICAgICAgICBncnViMi1lZGl0ZW52IC0gc2V0ICIkZ3J1YjJfZW52IGZpcHM9MSAkYm9vdF91dWlkIgogICAgZWxzZQogICAgICAgIGdydWJieSAtLXVwZGF0ZS1rZXJuZWw9QUxMIC0tYXJncz0iZmlwcz0xICRib290X3V1aWQiCiAgICBmaQoKICAgICMgZmlwcyBtb2RlIHZlcmlmaWNhdGlvbiB3aWxsIGZhaWwgdW50aWwgYWZ0ZXIgdGhlIHZtIGhhcyBiZWVuIHJlYm9vdGVkCiAgICAjIGZpcHNfdmVyaWZ5Cn0KCiMgY29uZmlndXJlX3NzaGQKIyBXZSBuZWVkIHRvIGNvbmZpZ3VyZSBQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHRvIHllcyBpbiBvcmRlciBmb3IgdGhlIFZNU1MgQWNjZXNzIEpJVCB0byB3b3JrCmNvbmZpZ3VyZV9zc2hkKCkgewogICAgbG9nICJzdGFydGluZyIKICAgIGxvY2FsIC1yIHNzaGRfY29uZmlnPSIvZXRjL3NzaC9zc2hkX2NvbmZpZyIKCiAgICBsb2cgIkVkaXRpbmcgJHNzaGRfY29uZmlnIHRvIGFsbG93IHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIgogICAgc2VkIC1pICdzL1Bhc3N3b3JkQXV0aGVudGljYXRpb24gbm8vUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMvZycgIiRzc2hkX2NvbmZpZyIKCiAgICBzeXN0ZW1jdGwgcmVsb2FkIHNzaGQuc2VydmljZSB8fCBhYm9ydCAic3NoZCBmYWlsZWQgdG8gcmVsb2FkIgp9CgojIGNvbmZpZ3VyZV9sb2dyb3RhdGUgY2xvYmJlcnMgL2V0Yy9sb2dyb3RhdGUuY29uZgojIGFyZ3M6CiMgMSkgZHJvcGluX2ZpbGVzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXksIG9wdGlvbmFsOyBsb2dyb3RhdGUgZmlsZXMgdG8gd3JpdGUgdG8gL2V0Yy9sb2dyb3RhdGUuZAojICAgICAgIEtleSBuYW1lIGRpY3RhdGVzIGZpbGVuYW1lcyB3cml0dGVuIHRvIC9ldGMvbG9ncm90YXRlLmQuCiMgRXhhbXBsZTogCiMgICBLZXkgZGljdGF0ZXMgdGhlIGZpbGVuYW1lIHdyaXR0ZW4gaW4gL2V0Yy9sb2dyb3RhdGUuZAojICAgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAojICAgbG9jYWwgLXJBIGxvZ3JvdGF0ZV9kcm9waW5zPSgKIyAgICAgIFsiZ2F0ZXdheSJdPSIkZ2F0ZXdheV9sb2dfZmlsZSIKIyAgICkKY29uZmlndXJlX2xvZ3JvdGF0ZSgpIHsKICAgIGxvY2FsIC1uIGRyb3Bpbl9maWxlcz0iJHsxOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lPScvZXRjL2xvZ3JvdGF0ZS5jb25mJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlPScjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKIyByb3RhdGUgbG9nIGZpbGVzIHdlZWtseQp3ZWVrbHkKCiMga2VlcCAyIHdlZWtzIHdvcnRoIG9mIGJhY2tsb2dzCnJvdGF0ZSAyCgojIGNyZWF0ZSBuZXcgKGVtcHR5KSBsb2cgZmlsZXMgYWZ0ZXIgcm90YXRpbmcgb2xkIG9uZXMKY3JlYXRlCgojIHVzZSBkYXRlIGFzIGEgc3VmZml4IG9mIHRoZSByb3RhdGVkIGZpbGUKZGF0ZWV4dAoKIyB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB5b3VyIGxvZyBmaWxlcyBjb21wcmVzc2VkCmNvbXByZXNzCgojIFJQTSBwYWNrYWdlcyBkcm9wIGxvZyByb3RhdGlvbiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgZGlyZWN0b3J5CmluY2x1ZGUgL2V0Yy9sb2dyb3RhdGUuZAoKIyBubyBwYWNrYWdlcyBvd24gd3RtcCBhbmQgYnRtcCAtLSB3ZSB3aWxsIHJvdGF0ZSB0aGVtIGhlcmUKL3Zhci9sb2cvd3RtcCB7CiAgICBtb250aGx5CiAgICBjcmVhdGUgMDY2NCByb290IHV0bXAKICAgICAgICBtaW5zaXplIDFNCiAgICByb3RhdGUgMQp9CgovdmFyL2xvZy9idG1wIHsKICAgIG1pc3NpbmdvawogICAgbW9udGhseQogICAgY3JlYXRlIDA2MDAgcm9vdCB1dG1wCiAgICByb3RhdGUgMQp9JwoKICAgIHdyaXRlX2ZpbGUgbG9ncm90YXRlX2NvbmZfZmlsZW5hbWUgbG9ncm90YXRlX2NvbmZfZmlsZSB0cnVlCgogICAgaWYgWyAtbiAiJHtkcm9waW5fZmlsZXNbKl19IiBdOyB0aGVuCiAgICAgICAgbG9jYWwgLXIgbG9ncm90YXRlX2Q9Ii9ldGMvbG9ncm90YXRlLmQiCiAgICAgICAgbG9nICJXcml0aW5nIGxvZ3JvdGF0ZSBmaWxlcyB0byAkbG9ncm90YXRlX2QiCiAgICAgICAgZm9yIGRyb3Bpbl9uYW1lIGluICIkeyFkcm9waW5fZmlsZXNbQF19IjsgZG8KICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgICAgIGxvY2FsIC1yIGRyb3Bpbl9maWxlbmFtZT0iJGxvZ3JvdGF0ZV9kLyRkcm9waW5fbmFtZSIKICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgICAgIGxvY2FsIC1yIGRyb3Bpbl9maWxlPSIke2Ryb3Bpbl9maWxlc1siJGRyb3Bpbl9uYW1lIl19IgogICAgICAgICAgICB3cml0ZV9maWxlIGRyb3Bpbl9maWxlbmFtZSBkcm9waW5fZmlsZSB0cnVlCiAgICAgICAgZG9uZQogICAgZmkKfQoKIyBwdWxsX2NvbnRhaW5lcl9pbWFnZXMKIyBhcmdzOgojIDEpIHB1bGxfaW1hZ2VzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5CiMgMikgcmVnaXN0cnlfY29uZiAtIG5hbWVyZWYsIHN0cmluZywgb3B0aW9uYWw7IHBhdGggdG8gZG9ja2VyL3BvZG1hbiBjb25maWd1cmF0aW9uIGZpbGUKcHVsbF9jb250YWluZXJfaW1hZ2VzKCkgewogICAgbG9jYWwgLW4gcHVsbF9pbWFnZXM9IiQxIgogICAgbG9jYWwgLW4gcmVnaXN0cnlfY29uZj0iJHsyOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yaSByZXRyeV90aW1lPTMwCiAgICAjIFRoZSBtYW5hZ2VkIGlkZW50aXR5IHRoYXQgdGhlIFZNIHJ1bnMgYXMgb25seSBoYXMgYSBzaW5nbGUgcm9sZWFzc2lnbm1lbnQuCiAgICAjIFRoaXMgcm9sZSBhc3NpZ25tZW50IGlzIEFDUlB1bGwgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHByZXNlbnQgaW4gdGhlCiAgICAjIHN1YnNjcmlwdGlvbiB3ZSdyZSBkZXBsb3lpbmcgaW50by4gIElmIHRoZSBpZGVudGl0eSBkb2VzIG5vdCBoYXZlIGFueQogICAgIyByb2xlIGFzc2lnbm1lbnRzIHNjb3BlZCBvbiB0aGUgc3Vic2NyaXB0aW9uIHdlJ3JlIGRlcGxveWluZyBpbnRvLCBpdCB3aWxsCiAgICAjIG5vdCBzaG93IG9uIGF6IGxvZ2luIC1pLCB3aGljaCBpcyB3aHkgdGhlIGJlbG93IGxpbmUgaXMgY29tbWVudGVkLgogICAgIyBheiBhY2NvdW50IHNldCAtcyAiJFNVQlNDUklQVElPTklEIgogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGxvZ2luCiAgICAgICAgLWkKICAgICAgICAtLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9naW4gd2l0aCByZXRyaWVzIgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKCiAgICAjIFN1cHByZXNzIGVtdWxhdGlvbiBvdXRwdXQgZm9yIHBvZG1hbiBpbnN0ZWFkIG9mIGRvY2tlciBmb3IgYXogYWNyIGNvbXBhdGFiaWxpdHkKICAgIG1rZGlyIC1wIC9ldGMvY29udGFpbmVycy8KICAgIG1rZGlyIC1wIC9yb290Ly5kb2NrZXIKICAgIHRvdWNoIC9ldGMvY29udGFpbmVycy9ub2RvY2tlcgoKICAgICMgVGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIGNhc2UgdGhhdCBheiBhY3IgbG9naW4gc2VhcmNoZXMgZm9yIHRoaXMgaW4gaXQncyBlbnZpcm9ubWVudAogICAgZXhwb3J0IFJFR0lTVFJZX0FVVEhfRklMRT0iL3Jvb3QvLmRvY2tlci9jb25maWcuanNvbiIKICAgIAogICAgaWYgWyAtbiAiJHtyZWdpc3RyeV9jb25mfSIgXTsgdGhlbgogICAgICAgIHdyaXRlX2ZpbGUgUkVHSVNUUllfQVVUSF9GSUxFIHJlZ2lzdHJ5X2NvbmYgdHJ1ZQogICAgZmkKCiAgICBsb2cgImxvZ2dpbmcgaW50byBwcm9kIGFjciIKICAgIGNtZD0oCiAgICAgICAgYXoKICAgICAgICBhY3IKICAgICAgICBsb2dpbgogICAgICAgIC0tbmFtZQogICAgICAgICMgVE9ETyByZXBsYWNlIHRoaXMgd2l0aCB2YXJpYWJsZSBleHBhbnNpb24KICAgICAgICAjIFJlZmVyZW5jZTogaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIwMDEKICAgICAgICAiJChzZWQgLWUgJ3N8LiovfHwnIDw8PCIkQUNSUkVTT1VSQ0VJRCIpIgogICAgKQoKICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3IgaSBpbiAke3B1bGxfaW1hZ2VzW0BdfTsgZG8KICAgICAgICBsb2NhbCAtbiBpbWFnZT0iJGkiCiAgICAgICAgY21kPSgKICAgICAgICAgICAgcG9kbWFuCiAgICAgICAgICAgIHB1bGwKICAgICAgICAgICAgIiRpbWFnZSIKICAgICAgICApCgogICAgICAgIGxvZyAiUHVsbGluZyBpbWFnZSAkaW1hZ2Ugd2l0aCByZXRyaWVzIG5vdyIKICAgICAgICByZXRyeSBjbWQgcmV0cnlfdGltZQogICAgZG9uZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGxvZ291dAogICAgKQoKICAgIGxvZyAiUnVubmluZyBheiBsb2dvdXQgd2l0aCByZXRyaWVzIgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKfQoKIyBjb25maWd1cmVfY2VydHNfZ2VuZXJhbCBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBjb21tb24gdG8gYWxsIFZNU1MgaW5zdGFuY2VzCmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNldHRpbmcgTU9OSVRPUklOR19HQ1NfQVVUSF9JRF9UWVBFPUF1dGhLZXlWYXVsdCBzZWVtcyB0byBoYXZlIGNhdXNlZCBtZHNkIG5vdAogICAgIyB0byBob25vdXIgU1NMX0NFUlRfRklMRSBhbnkgbW9yZSwgaGVhdmVuIG9ubHkga25vd3Mgd2h5LgogICAgbG9jYWwgLXIgc3NsX2NlcnRzX2Jhc2VkaXI9Ii91c3IvbGliL3NzbC9jZXJ0cyIKICAgIG1rZGlyIC1wICIkc3NsX2NlcnRzX2Jhc2VkaXIiCiAgICBjc3BsaXQgLWYgIiRzc2xfY2VydHNfYmFzZWRpci9jZXJ0LSIgLWIgJTAzZC5wZW0gL2V0Yy9wa2kvdGxzL2NlcnRzL2NhLWJ1bmRsZS5jcnQgL14kLzEgInsqfSIgMT4vZGV2L251bGwKICAgIGNfcmVoYXNoICIkc3NsX2NlcnRzX2Jhc2VkaXIiCn0KCiMgY29uZmlndXJlX2NlcnRzX3JwIENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGZvciBSUCBWTVNTCiMgYXJnczoKY29uZmlndXJlX2NlcnRzX3JwKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlX3JwCgogICAgbG9jYWwgLXIgcnBfY2VydHNfYmFzZWRpcj0iL2V0Yy9hcm8tcnAiCiAgICBta2RpciAtcCAiJHJwX2NlcnRzX2Jhc2VkaXIiCiAgICBiYXNlNjQgLWQgPDw8IiRBRE1JTkFQSUNBQlVORExFIiA+ICIkcnBfY2VydHNfYmFzZWRpci9hZG1pbi1jYS1idW5kbGUucGVtIgogICAgaWYgW1sgLW4gIiRBUk1BUElDQUJVTkRMRSIgXV07IHRoZW4KICAgIGJhc2U2NCAtZCA8PDwiJEFSTUFQSUNBQlVORExFIiA+ICIkcnBfY2VydHNfYmFzZWRpci9hcm0tY2EtYnVuZGxlLnBlbSIKICAgIGZpCiAgICBjaG93biAtUiAxMDAwOjEwMDAgIiRycF9jZXJ0c19iYXNlZGlyIgoKICAgIGNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KCiMgY29uZmlndXJlX2NlcnRzX2dhdGV3YXkgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgZm9yIEdhdGV3YXkgVk1TUyBpbnN0YW5jZXMKY29uZmlndXJlX2NlcnRzX2dhdGV3YXkoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGVfZ2F0ZXdheQogICAgY29uZmlndXJlX2NlcnRzX2dlbmVyYWwKfQoKIyBjb25maWd1cmVfY2VydHNfZGV2cHJveHkgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgZm9yIGRldnByb3h5IFZNU1MgaW5zdGFuY2VzCmNvbmZpZ3VyZV9jZXJ0c19kZXZwcm94eSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZV9kZXZwcm94eSB0cnVlCiAgICAKICAgIGxvY2FsIC1yIHByb3h5X2NlcnRzX2Jhc2VkaXI9Ii9ldGMvcHJveHkiCiAgICBta2RpciAtcCAiJHByb3h5X2NlcnRzX2Jhc2VkaXIiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LmNydCIKICAgIGJhc2U2NCAtZCA8PDwiJFBST1hZS0VZIiA+ICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUNMSUVOVENFUlQiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LWNsaWVudC5jcnQiCiAgICBjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQogICAgY2htb2QgMDYwMCAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkua2V5Igp9Cgpjb25maWd1cmVfYXpzZWNkX3NjYW4oKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgICMgd2UgbGVhdmUgY2xpZW50SWQgYmxhbmsgYXMgbG9uZyBhcyBvbmx5IDEgbWFuYWdlZCBpZGVudGl0eSBhc3NpZ25lZCB0byB2bXNzCiAgICAjIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEsIHdlIHdpbGwgbmVlZCB0byBwb3B1bGF0ZSB3aXRoIGNsaWVudElkIHVzZWQgZm9yIG9mZi1ub2RlIHNjYW5uaW5nCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lPSIvZXRjL2RlZmF1bHQvdnNhLW5vZGVzY2FuLWFnZW50LmNvbmZpZyIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZT0iewogICAgXCJOaWNlXCI6IDE5LAogICAgXCJUaW1lb3V0XCI6IDEwODAwLAogICAgXCJDbGllbnRJZFwiOiBcIlwiLAogICAgXCJUZW5hbnRJZFwiOiAkQVpVUkVTRUNQQUNLVlNBVEVOQU5USUQsCiAgICBcIlF1YWx5c1N0b3JlQmFzZVVybFwiOiAkQVpVUkVTRUNQQUNLUVVBTFlTVVJMLAogICAgXCJQcm9jZXNzVGltZW91dFwiOiAzMDAsCiAgICBcIkNvbW1hbmREZWxheVwiOiAwCiAgfSIKCiAgICB3cml0ZV9maWxlIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lIG5vZGVzY2FuX2FnZW50X2ZpbGUgdHJ1ZQp9CgojIHJ1bl9henNlY2RfY29uZmlnX3NjYW4KcnVuX2F6c2VjZF9jb25maWdfc2NhbigpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgY29uZmlndXJlX2F6c2VjZF9zY2FuCgogICAgbG9jYWwgLWFyIGNvbmZpZ3M9KAogICAgICAgICJiYXNlbGluZSIKICAgICAgICAiY2xhbWF2IgogICAgICAgICJzb2Z0d2FyZSIKICAgICkKCiAgICBsb2cgIlNjYW5uaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2l0aCBhenNlY2QgJHtjb25maWdzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHNjYW4gaW4gJHtjb25maWdzW0BdfTsgZG8KICAgICAgICBsb2cgIlNjYW5uaW5nIGNvbmZpZyBmaWxlICRzY2FuIG5vdyIKICAgICAgICAvdXNyL2xvY2FsL2Jpbi9henNlY2QgY29uZmlnIC1zICIkc2NhbiIgLWQgUDFECiAgICBkb25lCn0KCiMgY3JlYXRlX3JlcXVpcmVkX2RpcnMKY3JlYXRlX3JlcXVpcmVkX2RpcnMoKSB7CiAgICBjcmVhdGVfZGlycz0oCiAgICAgICAgL3Zhci9sb2cvam91cm5hbAogICAgICAgIC92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlCiAgICAgICAgIyBEb2VzIG5vdCBleGlzdCBvbiBkZXZQcm94eVZNU1MKICAgICAgICAvdmFyL29wdC9taWNyb3NvZnQvbGludXhtb25hZ2VudAogICAgKQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIGQgaW4gJHtjcmVhdGVfZGlyc1tAXX07IGRvCiAgICAgICAgbG9nICJDcmVhdGluZyBkaXJlY3RvcnkgJGQiCiAgICAgICAgbWtkaXIgLXAgIiRkIiB8fCBhYm9ydCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJGQiCiAgICBkb25lCn0KCiMgY3JlYXRlX3BvZG1hbl9uZXR3b3JrcygpCiMgYXJnczoKIyAxKSBuZXRzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IE5ldHdvcmtzIHRvIGJlIGNyZWF0ZWQKIyAgICAgICBLZXkgaXMgdGhlIG5ldHdvcmsgbmFtZSwgdmFsdWUgaXMgdGhlIHN1Ym5ldCB3aXRoIGNpZHIgbm90YXRpb24KY3JlYXRlX3BvZG1hbl9uZXR3b3JrcygpIHsKICAgIGxvY2FsIC1uIG5ldHM9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBuIGluICR7IW5ldHNbQF19OyBkbwogICAgICAgIGxvZyAiQ3JlYXRpbmcgcG9kbWFuIG5ldHdvcmsgXCIkblwiIHdpdGggc3VibmV0IFwiJHtuZXRzWyRuXX1cIiIKICAgICAgICBwb2RtYW4gbmV0d29yayBcCiAgICAgICAgICAgIGNyZWF0ZSBcCiAgICAgICAgICAgIC0tc3VibmV0ICIke25ldHNbIiRuIl19IiBcCiAgICAgICAgICAgICIkbiIKICAgIGRvbmUKfQoKIyBmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2cgIkNoYW5naW5nIGZpcmV3YWxsZCBiYWNrZW5kIHRvIGlwdGFibGVzIgogICAgY29uZl9maWxlPSIvZXRjL2ZpcmV3YWxsZC9maXJld2FsbGQuY29uZiIKICAgIHNlZCAtaSAncy9GaXJld2FsbEJhY2tlbmQ9bmZ0YWJsZXMvRmlyZXdhbGxCYWNrZW5kPWlwdGFibGVzL2cnICIkY29uZl9maWxlIgp9CgojIGZpcmV3YWxsZF9jb25maWd1cmUKIyBhcmdzOgojIDEpIHBvcnRzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBwb3J0cyB0byBiZSBlbmFibGVkLgojICAgICAgIFBvcnRzIG11c3QgYmUgcG9zdGZpeGVkIHdpdGggL3RjcCBvciAvdWRwCmZpcmV3YWxsZF9jb25maWd1cmUoKSB7CiAgICBsb2NhbCAtbiBwb3J0cz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZAoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIHNlcnZpY2U9KAogICAgICAgICJmaXJld2FsbGQiCiAgICApCiAgICBlbmFibGVfc2VydmljZXMgc2VydmljZQoKICAgIGxvZyAiRW5hYmxpbmcgcG9ydHMgJHtwb3J0c1sqXX0gb24gZGVmYXVsdCBmaXJld2FsbGQgem9uZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHBvcnQgaW4gJHtwb3J0c1tAXX07IGRvCiAgICAgICAgbG9nICJFbmFibGluZyBwb3J0ICRwb3J0IG5vdyIKICAgICAgICBmaXJld2FsbC1jbWQgIi0tYWRkLXBvcnQ9JHBvcnQiIFwKICAgICAgICAgICAgICAgICAgICAgLS1wZXJtYW5lbnQKICAgIGRvbmUKCiAgICBsb2cgIldyaXRpbmcgcnVudGltZSBjb25maWcgdG8gcGVybWFuZW50IGNvbmZpZyIKICAgIGZpcmV3YWxsLWNtZCAtLXJ1bnRpbWUtdG8tcGVybWFuZW50Cn0KCiMgdXRpbC1jb21tb24uc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKCnNldCAtbyBlcnJleGl0IFwKICAgIC1vIHBpcGVmYWlsIFwKICAgIC1vIG5vdW5zZXQKCm1haW4oKSB7CiAgICAjIHRyYW5zYWN0aW9uIGF0dGVtcHQgcmV0cnkgdGltZSBpbiBzZWNvbmRzCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yaSByZXRyeV93YWl0X3RpbWU9MzAKICAgIGxvY2FsIC1yaSBwa2dfcmV0cnlfY291bnQ9NjAKCiAgICBjcmVhdGVfcmVxdWlyZWRfZGlycwogICAgY29uZmlndXJlX3NzaGQKICAgIGNvbmZpZ3VyZV9ycG1fcmVwb3MgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAgICAgIiRwa2dfcmV0cnlfY291bnQiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtYXIgZXhjbHVkZV9wa2dzPSgKICAgICAgICAiLXggV0FMaW51eEFnZW50IgogICAgICAgICIteCBXQUxpbnV4QWdlbnQtdWRldiIKICAgICkKCiAgICBkbmZfdXBkYXRlX3BrZ3MgZXhjbHVkZV9wa2dzIFwKICAgICAgICAgICAgICAgICAgICByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIGluc3RhbGxfcGtncz0oCiAgICAgICAgY2xhbWF2CiAgICAgICAgYXpzZWMtY2xhbWF2CiAgICAgICAgYXp1cmUtY2xpCiAgICAgICAgYXp1cmUtbWRzZAogICAgICAgIGF6dXJlLXNlY3VyaXR5CiAgICAgICAgcG9kbWFuCiAgICAgICAgcG9kbWFuLWRvY2tlcgogICAgICAgIG9wZW5zc2wtcGVybAogICAgICAgICMgaGFjayAtIHdlIGFyZSBpbnN0YWxsaW5nIHB5dGhvbjMgb24gaG9zdHMgZHVlIHRvIGFuIGlzc3VlIHdpdGggQXp1cmUgTGludXggRXh0ZW5zaW9ucyBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvYXp1cmUtbGludXgtZXh0ZW5zaW9ucy9wdWxsLzE1MDUKICAgICAgICBweXRob24zCiAgICAgICAgIyByZXF1aXJlZCBmb3IgcG9kbWFuIG5ldHdvcmtpbmcKICAgICAgICBmaXJld2FsbGQKICAgICAgICAjIFJlcXVpcmVkIHRvIGVuYWJsZSBmaXBzCiAgICAgICAgZ3J1YmJ5CiAgICAgICAgZHJhY3V0LWZpcHMKICAgICkKCiAgICBkbmZfaW5zdGFsbF9wa2dzIGluc3RhbGxfcGtncyBcCiAgICAgICAgICAgICAgICAgICAgIHJldHJ5X3dhaXRfdGltZSBcCiAgICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgIGZpcHNfY29uZmlndXJlCgogICAgIyBUT0RPIHJlbW92ZSB0aGlzIG9uY2UgTWljcm9zb2Z0Q0JMTWFyaW5lcjpjYmwtbWFyaW5lcjpjYmwtbWFyaW5lci0yLWdlbjItZmlwcyBzdXBwb3J0cyBhdXRvbWF0aWMgdXBkYXRlcwogICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy1hdXRvbWF0aWMtdXBncmFkZSNzdXBwb3J0ZWQtb3MtaW1hZ2VzCiAgICBjb25maWd1cmVfZG5mX2Nyb25fam9iCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTE5CiAgICBjb25maWd1cmVfbG9ncm90YXRlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTUzIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZG1pbWFnZT0iJHtSUElNQUdFJSUvKn0vJHtNRE1JTUFHRSMqL30iCiAgICBsb2NhbCAtciBycGltYWdlPSIkUlBJTUFHRSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZmx1ZW50Yml0X2ltYWdlPSIkRkxVRU5UQklUSU1BR0UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9faW1hZ2VzPSgKICAgICAgICBbIm1kbSJdPSJtZG1pbWFnZSIKICAgICAgICBbInJwIl09InJwaW1hZ2UiCiAgICAgICAgWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2ltYWdlIgogICAgKQoKICAgIHB1bGxfY29udGFpbmVyX2ltYWdlcyBhcm9faW1hZ2VzCgogICAgbG9jYWwgLXIgYXJvX25ldHdvcms9ImFybyIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJBIG5ldHdvcmtzPSgKICAgICAgICBbIiRhcm9fbmV0d29yayJdPSIxOTIuMTY4LjI1NC4wLzI0IgogICAgKQogICAgY3JlYXRlX3BvZG1hbl9uZXR3b3JrcyBuZXR3b3JrcwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIGVuYWJsZV9wb3J0cz0oCiAgICAgICAgIyBSUCBmcm9udGVuZAogICAgICAgICI0NDMvdGNwIgogICAgICAgICMgUG9ydGFsIHdlYgogICAgICAgICI0NDQvdGNwIgogICAgICAgICMgUG9ydGFsIHNzaAogICAgICAgICIyMjIyL3RjcCIKICAgICAgICAjIEpJVCBzc2gKICAgICAgICAiMjIvdGNwIgogICAgKQoKICAgIGZpcmV3YWxsZF9jb25maWd1cmUgZW5hYmxlX3BvcnRzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBmbHVlbnRiaXRfY29uZl9maWxlPSJbSU5QVVRdCiAgICBOYW1lIHN5c3RlbWQKICAgIFRhZyBqb3VybmFsZAogICAgU3lzdGVtZF9GaWx0ZXIgX0NPTU09YXJvCiAgICBEQiAvdmFyL2xpYi9mbHVlbnQvam91cm5hbGRiCgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGpvdXJuYWxkCglSZW1vdmVfd2lsZGNhcmQgXwoJUmVtb3ZlIFRJTUVTVEFNUAoKW0ZJTFRFUl0KCU5hbWUgcmV3cml0ZV90YWcKCU1hdGNoIGpvdXJuYWxkCglSdWxlIFwkTE9HS0lORCBhc3luY3FvcyBhc3luY3FvcyB0cnVlCgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGFzeW5jcW9zCglSZW1vdmUgQ0xJRU5UX1BSSU5DSVBBTF9OQU1FCglSZW1vdmUgRklMRQoJUmVtb3ZlIENPTVBPTkVOVAoKW0ZJTFRFUl0KCU5hbWUgcmV3cml0ZV90YWcKCU1hdGNoIGpvdXJuYWxkCglSdWxlIFwkTE9HS0lORCBpZnhhdWRpdCBpZnhhdWRpdCBmYWxzZQoKW09VVFBVVF0KCU5hbWUgZm9yd2FyZAoJTWF0Y2ggKgoJUG9ydCAyOTIzMCIKCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZHNkX2NvbmZpZ192ZXJzaW9uPSIkUlBNRFNEQ09ORklHVkVSU0lPTiIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3JwX2NvbmZfZmlsZT0iQUNSX1JFU09VUkNFX0lEPSckQUNSUkVTT1VSQ0VJRCcKQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FPSckQURNSU5BUElDTElFTlRDRVJUQ09NTU9OTkFNRScKQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRT0nJEFSTUFQSUNMSUVOVENFUlRDT01NT05OQU1FJwpBWlVSRV9BUk1fQ0xJRU5UX0lEPSckQVJNQ0xJRU5USUQnCkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkFaVVJFX0ZQX1NFUlZJQ0VfUFJJTkNJUEFMX0lEPSckRlBTRVJWSUNFUFJJTkNJUEFMSUQnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPVJQCkNMVVNURVJfTURTRF9BQ0NPVU5UPSckQ0xVU1RFUk1EU0RBQ0NPVU5UJwpDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT049JyRDTFVTVEVSTURTRENPTkZJR1ZFUlNJT04nCkNMVVNURVJfTURTRF9OQU1FU1BBQ0U9JyRDTFVTVEVSTURTRE5BTUVTUEFDRScKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKRE9NQUlOX05BTUU9JyRMT0NBVElPTi4kQ0xVU1RFUlBBUkVOVERPTUFJTk5BTUUnCkdBVEVXQVlfRE9NQUlOUz0nJEdBVEVXQVlET01BSU5TJwpHQVRFV0FZX1JFU09VUkNFR1JPVVA9JyRHQVRFV0FZUkVTT1VSQ0VHUk9VUE5BTUUnCktFWVZBVUxUX1BSRUZJWD0nJEtFWVZBVUxUUFJFRklYJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT0nJHtyb2xlX3JwXl59JwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpSUF9GRUFUVVJFUz0nJFJQRkVBVFVSRVMnClJQSU1BR0U9JyRycGltYWdlJwpBUk9fSU5TVEFMTF9WSUFfSElWRT0nJENMVVNURVJTSU5TVEFMTFZJQUhJVkUnCkFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDPSckQ0xVU1RFUkRFRkFVTFRJTlNUQUxMRVJQVUxMU1BFQycKQVJPX0FET1BUX0JZX0hJVkU9JyRDTFVTVEVSU0FET1BUQllISVZFJwpPSURDX0FGRF9FTkRQT0lOVD0nJExPQ0FUSU9OLm9pYy4kUlBQQVJFTlRET01BSU5OQU1FJwpPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FPSckT0lEQ1NUT1JBR0VBQ0NPVU5UTkFNRScKIgoKICAgICMgdmFsdWVzIGFyZSByZWZlcmVuY2VzIHRvIHZhcmlhYmxlcywgdGhleSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBoZXJlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9fY29uZmlncz0oCiAgICAgICAgWyJycF9jb25maWciXT0iYXJvX3JwX2NvbmZfZmlsZSIKICAgICAgICBbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfY29uZl9maWxlIgogICAgICAgIFsibWRzZCJdPSJtZHNkX2NvbmZpZ192ZXJzaW9uIgogICAgICAgIFsibmV0d29yayJdPSJhcm9fbmV0d29yayIKICAgICkKCiAgICBjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMgcm9sZV9ycCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvX2ltYWdlcyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvX2NvbmZpZ3MKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBhcm9fc2VydmljZXM9KAogICAgICAgICJhcm8tbW9uaXRvciIKICAgICAgICAiYXJvLXBvcnRhbCIKICAgICAgICAiYXJvLXJwIgogICAgICAgICJhenNlY2QiCiAgICAgICAgIm1kc2QiCiAgICAgICAgIm1kbSIKICAgICAgICAiY2hyb255ZCIKICAgICAgICAiZmx1ZW50Yml0IgogICAgICAgICJkb3dubG9hZC1tZHNkLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICJkb3dubG9hZC1tZG0tY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgImZpcmV3YWxsZCIKICAgICkKCiAgICBlbmFibGVfc2VydmljZXMgYXJvX3NlcnZpY2VzCgogICAgcmVib290X3ZtCn0KCmV4cG9ydCBBWlVSRV9DTE9VRF9OQU1FPSIke0FaVVJFQ0xPVUROQU1FOj8iRmFpbGVkIHRvIGNhcnJ5IG92ZXIgdmFyaWFibGVzIn0iCgojIHV0aWwuc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWw9InV0aWwuc2giCmlmIFsgLWYgIiR1dGlsIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwuc2gKICAgIHNvdXJjZSAiJHV0aWwiCmZpCgptYWluICIkQCIK')))]" } } }, diff --git a/pkg/deploy/generator/resources_dev.go b/pkg/deploy/generator/resources_dev.go index a7864df136a..64dca447fe1 100644 --- a/pkg/deploy/generator/resources_dev.go +++ b/pkg/deploy/generator/resources_dev.go @@ -101,15 +101,9 @@ func (g *generator) devProxyVMSS() *arm.Resource { ) } - var sb strings.Builder - - sb.WriteString(string(scriptDevProxyVMSS)) - - trailer := base64.StdEncoding.EncodeToString([]byte(sb.String())) - + trailer := base64.StdEncoding.EncodeToString([]byte(scriptDevProxyVMSS)) parts = append(parts, "'\n'", fmt.Sprintf("base64ToString('%s')", trailer)) - - script := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) + customScript := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) return &arm.Resource{ Resource: &mgmtcompute.VirtualMachineScaleSet{ @@ -217,7 +211,7 @@ func (g *generator) devProxyVMSS() *arm.Resource { AutoUpgradeMinorVersion: to.BoolPtr(true), Settings: map[string]interface{}{}, ProtectedSettings: map[string]interface{}{ - "script": script, + "script": customScript, }, }, }, diff --git a/pkg/deploy/generator/resources_gateway.go b/pkg/deploy/generator/resources_gateway.go index 9f31332c796..ac8265d326f 100644 --- a/pkg/deploy/generator/resources_gateway.go +++ b/pkg/deploy/generator/resources_gateway.go @@ -241,23 +241,17 @@ func (g *generator) gatewayVMSS() *arm.Resource { "''')\n'", ) - var sb strings.Builder - // VMSS extensions only support one custom script // Because of this, the util-*.sh scripts are prefixed to the bootstrapping script // main is called at the end of the bootstrapping script, so appending them will not work - sb.WriteString(string(scriptUtilCommon)) - sb.WriteString(string(scriptUtilPackages)) - sb.WriteString(string(scriptUtilServices)) - sb.WriteString(string(scriptUtilSystem)) - sb.WriteString("\n#Start of gatewayVMSS.sh\n") - sb.WriteString(string(scriptGatewayVMSS)) - - trailer := base64.StdEncoding.EncodeToString([]byte(sb.String())) - + bootstrapScript := scriptUtilCommon + + scriptUtilPackages + + scriptUtilServices + + scriptUtilSystem + + scriptGatewayVMSS + trailer := base64.StdEncoding.EncodeToString([]byte(bootstrapScript)) parts = append(parts, "'\n'", fmt.Sprintf("base64ToString('%s')", trailer)) - - script := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) + customScript := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) return &arm.Resource{ Resource: &mgmtcompute.VirtualMachineScaleSet{ @@ -362,7 +356,7 @@ func (g *generator) gatewayVMSS() *arm.Resource { AutoUpgradeMinorVersion: to.BoolPtr(true), Settings: map[string]interface{}{}, ProtectedSettings: map[string]interface{}{ - "script": script, + "script": customScript, }, }, }, diff --git a/pkg/deploy/generator/resources_rp.go b/pkg/deploy/generator/resources_rp.go index 2c341c60921..327829e4f42 100644 --- a/pkg/deploy/generator/resources_rp.go +++ b/pkg/deploy/generator/resources_rp.go @@ -441,23 +441,17 @@ func (g *generator) rpVMSS() *arm.Resource { "''')\n'", ) - var sb strings.Builder - // VMSS extensions only support one custom script // Because of this, the util-*.sh scripts are prefixed to the bootstrapping script // main is called at the end of the bootstrapping script, so appending them will not work - sb.WriteString(string(scriptUtilCommon)) - sb.WriteString(string(scriptUtilPackages)) - sb.WriteString(string(scriptUtilServices)) - sb.WriteString(string(scriptUtilSystem)) - sb.WriteString("\n#Start of rpVMSS.sh\n") - sb.WriteString(string(scriptRpVMSS)) - - trailer := base64.StdEncoding.EncodeToString([]byte(sb.String())) - + bootstrapScript := scriptUtilCommon + + scriptUtilPackages + + scriptUtilServices + + scriptUtilSystem + + scriptRpVMSS + trailer := base64.StdEncoding.EncodeToString([]byte(bootstrapScript)) parts = append(parts, "'\n'", fmt.Sprintf("base64ToString('%s')", trailer)) - - script := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) + customScript := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) return &arm.Resource{ Resource: &mgmtcompute.VirtualMachineScaleSet{ @@ -560,7 +554,7 @@ func (g *generator) rpVMSS() *arm.Resource { AutoUpgradeMinorVersion: to.BoolPtr(true), Settings: map[string]interface{}{}, ProtectedSettings: map[string]interface{}{ - "script": script, + "script": customScript, }, }, }, diff --git a/pkg/deploy/generator/scripts.go b/pkg/deploy/generator/scripts.go index c07f7ca9167..8af8fab3c1d 100644 --- a/pkg/deploy/generator/scripts.go +++ b/pkg/deploy/generator/scripts.go @@ -8,22 +8,22 @@ import ( ) //go:embed scripts/devProxyVMSS.sh -var scriptDevProxyVMSS []byte +var scriptDevProxyVMSS string //go:embed scripts/gatewayVMSS.sh -var scriptGatewayVMSS []byte +var scriptGatewayVMSS string //go:embed scripts/rpVMSS.sh -var scriptRpVMSS []byte +var scriptRpVMSS string //go:embed scripts/util-system.sh -var scriptUtilSystem []byte +var scriptUtilSystem string //go:embed scripts/util-services.sh -var scriptUtilServices []byte +var scriptUtilServices string //go:embed scripts/util-packages.sh -var scriptUtilPackages []byte +var scriptUtilPackages string //go:embed scripts/util-common.sh -var scriptUtilCommon []byte +var scriptUtilCommon string